library(lsmeans)
library(tidyverse)

Read in the Datasets

set_1 <- read.csv("./all_potato_data/Set1-Table 1.csv", header = T)
set_2.1 <- read.csv("./all_potato_data/Set2_Day1-Table 1.csv", header = T) 
set_2.2 <- read.csv("./all_potato_data/Set2_Day2-Table 1.csv", header = T)
set_2.3 <- read.csv("./all_potato_data/Set2_Day3-Table 1.csv", header = T) 
set_2.4 <- read.csv("./all_potato_data/Set2_Day4-Table 1.csv", header = T) 
set_3.1 <- read.csv("./all_potato_data/Set3_Day1-Table 1.csv", header = T) 
set_3.2 <- read.csv("./all_potato_data/Set3_Day2-Table 1.csv", header = T) 
set_3.3 <- read.csv("./all_potato_data/Set3_Day3-Table 1.csv", header = T) 
set_3.4 <- read.csv("./all_potato_data/Set3_Day4-Table 1.csv", header = T) 
set_3.5 <- read.csv("./all_potato_data/Set3_Day5-Table 1.csv", header = T) 
set_4.1 <- read.csv("./all_potato_data/Set4_Day1-Table 1.csv", header = T) 
set_4.2 <- read.csv("./all_potato_data/Set4_Day2-Table 1.csv", header = T) 
set_4.3 <- read.csv("./all_potato_data/Set4_Day3-Table 1.csv", header = T) 
# combine all datasets
master_set <- rbind(set_1, set_2.1, set_2.2, set_2.3, set_2.4, set_3.1, set_3.2, set_3.3, set_3.4, set_3.5, set_4.1, set_4.2, set_4.3)

Create list of isolates

potato_isolate_list <- as_tibble(unique(master_set$isolate)) # grab unique isolate IDs
names(potato_isolate_list) <- "Isolate" # change variable name
str(potato_isolate_list)
tibble [383 × 1] (S3: tbl_df/tbl/data.frame)
 $ Isolate: chr [1:383] "200488" "201859" "201813" "201880" ...
potato_isolate_list <- potato_isolate_list %>%
  mutate_if(is.factor, na_if, y = "") # add NA to empty values
potato_isolate_list <- potato_isolate_list %>% 
  filter(grepl("2", Isolate)) # remove rows without '2' prefix (non-isolate rows)
potato_isolate_list$Isolate <- paste0('BCW-', potato_isolate_list$Isolate) # add BCW- prefix
potato_isolate_list <- arrange(potato_isolate_list, Isolate) # arrange in descending order
write_csv(potato_isolate_list, "./R_Output_Files/potato_isolate_list.csv", col_names = T)

Statistical Analysis

Experimental Design

  • Potato plantlets purchased from Canada in bulk were individually transplanted into 1X MS media slants.
  • Mucilage Isolates were cultured in Luria’s Broth (LB) to an OD600 value of 0.6.
  • 100 µL of each inoculum was applied to a plantlet vial, was sealed, and the vials were incubated at 28 ºC for 3 weeks.
  • Each inoculation was evaluated in triplicate.
  • All Isolates that were incorporated into the whole genome sequencing study were assessed with this assay.
  • The number of isolates to be screened led to the full list being assessed in batches:
  • Batch 1
  • Batch 2 (4 groups)
  • Batch 3 (5 groups)
  • Batch 4 (3 groups)

Linear Modeling

Data measurements were fit to a linear model using the lm function of R. The normality of the data was assessed by visualizing parameters of each linear model in two ways:

  • Normal Q-Q plots (Standardized residuals vs. Theoretical Quantiles)
  • Scale - Location plots (Squareroot of Standard residuals vs. fitted values)

Anova

One way analysis of variance was applied to each linear model as a preliminary assessment of each inoculation batch.

The LSMeans Package

The LSMeans Package was used to calculate mean estimates, confidence intervals, and conduct multiple t-tests. Correction for multiple testing was implemented using either the Dunnett method, or the Tukey method (depending on the type of comparisons), and the adjusted p-values are presented in the outputs.

Compact Letter Display

Compact Letter Display is a function in R that assigns a common label to each treatment group based on whether or not the confidence intervals of the mean estimations from LSMeans overlap with those of other treatment groups. If two treatment groups have non-overlapping confidence intervals associated with their mean estimates, they are not classified within the same group. This allows higher security in asserting that the mean estimates are truly different at the specified confidence level.

Batch 1

# analyze set 1 data
str(set_1)
'data.frame':   744 obs. of  4 variables:
 $ isolate: chr  "200488" "200488" "200488" "200488" ...
 $ rep    : int  1 1 1 1 2 2 2 2 3 3 ...
 $ sample : chr  "WS" "WR" "DS" "DR" ...
 $ mg     : num  152.2 38.5 10.4 3.4 182.4 ...
#subset by sample type
set_1_DR <- filter(set_1, sample == "DR")
set_1_DS <- filter(set_1, sample == "DS")
set_1_WR <- filter(set_1, sample == "WR")
set_1_WS <- filter(set_1, sample == "WS")

Experimental Design Table

Structure Factor Type # levels
Treatment Isolate Qualitative 59
Design MS Media Slants Experimental Unit 177
Response Plant Tissue Weight Observational Unit 708
Response Dry Root Weight (DR) Variable 177
Response Dry Shoot Weight (DS) Variable 177
Response Wet Root Weight (WR) Variable 177
Response Wet Shoot Weight (WS) Variable 177
  • 57 Isolates
  • 2 controls
  • control_W - 100 µL of saline solution
  • control-WO - no added solution

1.1. Dry Root Weight

# linear model of dry root data
lm_set_1_DR <- lm(mg ~ 1 + isolate, set_1_DR)
op = par(mfrow=c(1,2))
plot(lm_set_1_DR, which = c(2,3))
not plotting observations with leverage one:
  35, 65, 69, 70
par(op)

1.1. - Anova

anova(lm_set_1_DR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value  Pr(>F)  
isolate   45 411.56  9.1457  1.8049 0.01044 *
Residuals 81 410.43  5.0670                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

1.1. - LSMeans (Control_W) - Dunnett

lsm_s1.dun.DR <- summary(lsmeans(lm_set_1_DR, trt.vs.ctrl ~isolate, ref=45)$contrasts, infer = c(T,T))
write.csv(lsm_s1.dun.DR, "./lsmeans_summary_tables/lsm_s1.dun.DR.csv")

1.1. - LSMeans (Control-WO) - Dunnett

summary(lsmeans(lm_set_1_DR, trt.vs.ctrl ~isolate, ref=46)$contrasts, infer = c(T,T))
 contrast               estimate   SE df lower.CL upper.CL t.ratio p.value
 200270 - control-WO      -0.383 1.84 81    -6.37    5.603 -0.209  1.0000 
 200275 - control-WO       1.200 1.59 81    -3.98    6.384  0.754  0.9990 
 200444 - control-WO      -3.333 2.43 81   -11.25    4.586 -1.371  0.9340 
 200488 - control-WO      -3.767 1.59 81    -8.95    1.418 -2.366  0.3650 
 200496 - control-WO      -2.200 1.59 81    -7.38    2.984 -1.382  0.9308 
 200533 - control-WO       2.717 1.84 81    -3.27    8.703  1.478  0.8991 
 200556 - control-WO      -1.567 1.59 81    -6.75    3.618 -0.984  0.9926 
 200659 - control-WO      -4.100 1.59 81    -9.28    1.084 -2.576  0.2499 
 200661 - control-WO      -2.033 1.59 81    -7.22    3.151 -1.277  0.9569 
 200715 - control-WO      -4.233 2.43 81   -12.15    3.686 -1.741  0.7734 
 200725 - control-WO      -1.833 1.84 81    -7.82    4.153 -0.997  0.9918 
 200726 - control-WO      -3.200 1.59 81    -8.38    1.984 -2.010  0.6009 
 200727 - control-WO      -0.233 1.84 81    -6.22    5.753 -0.127  1.0000 
 200808 - control-WO      -1.600 1.59 81    -6.78    3.584 -1.005  0.9914 
 200902 - control-WO      -1.600 1.59 81    -6.78    3.584 -1.005  0.9914 
 200939 - control-WO      -2.100 1.59 81    -7.28    3.084 -1.319  0.9475 
 201025 - control-WO      -2.500 1.59 81    -7.68    2.684 -1.571  0.8612 
 201045 - control-WO      -0.800 1.59 81    -5.98    4.384 -0.503  1.0000 
 201084 - control-WO      -4.867 1.59 81   -10.05    0.318 -3.058  0.0845 
 201085 - control-WO      -1.833 2.43 81    -9.75    6.086 -0.754  0.9990 
 201153 - control-WO      -2.533 1.59 81    -7.72    2.651 -1.592  0.8516 
 201162 - control-WO      -3.167 1.59 81    -8.35    2.018 -1.989  0.6152 
 201173 - control-WO      -4.800 1.59 81    -9.98    0.384 -3.016  0.0939 
 201236 - control-WO      -4.267 1.59 81    -9.45    0.918 -2.681  0.2022 
 201245 - control-WO      -3.367 1.59 81    -8.55    1.818 -2.115  0.5292 
 201823 - control-WO      -4.100 1.59 81    -9.28    1.084 -2.576  0.2499 
 201835 - control-WO      -1.500 1.59 81    -6.68    3.684 -0.942  0.9946 
 201836 - control-WO      -3.167 1.59 81    -8.35    2.018 -1.989  0.6152 
 201851 - control-WO      -0.133 1.59 81    -5.32    5.051 -0.084  1.0000 
 201858 - control-WO       2.967 1.59 81    -2.22    8.151  1.864  0.6985 
 201859 - control-WO      -2.833 1.59 81    -8.02    2.351 -1.780  0.7506 
 201870 - control-WO      -0.533 1.84 81    -6.52    5.453 -0.290  1.0000 
 201875 - control-WO      -2.900 1.59 81    -8.08    2.284 -1.822  0.7250 
 201876 - control-WO      -3.467 1.59 81    -8.65    1.718 -2.178  0.4865 
 201879 - control-WO      -2.367 1.59 81    -7.55    2.818 -1.487  0.8958 
 201885 - control-WO      -0.533 1.59 81    -5.72    4.651 -0.335  1.0000 
 201887 - control-WO      -2.033 2.43 81    -9.95    5.886 -0.836  0.9978 
 201888 - control-WO      -0.933 1.59 81    -6.12    4.251 -0.586  0.9999 
 201889 - control-WO      -4.067 1.59 81    -9.25    1.118 -2.555  0.2602 
 201895 - control-WO      -3.733 2.43 81   -11.65    4.186 -1.535  0.8764 
 201910 - control-WO      -4.467 1.59 81    -9.65    0.718 -2.806  0.1540 
 201917 - control-WO      -0.567 1.59 81    -5.75    4.618 -0.356  1.0000 
 201933 - control-WO      -5.133 2.43 81   -13.05    2.786 -2.111  0.5319 
 201936 - control-WO      -0.333 1.59 81    -5.52    4.851 -0.209  1.0000 
 control_W - control-WO   -1.933 1.30 81    -6.17    2.300 -1.488  0.8955 

Confidence level used: 0.95 
Conf-level adjustment: dunnettx method for 45 estimates 
P value adjustment: dunnettx method for 45 tests 

1.1 - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_1_DR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate    lsmean    SE df lower.CL upper.CL .group
 201933       1.60 2.251 81  -2.8788     6.08  12   
 201084       1.87 1.300 81  -0.7192     4.45  1    
 201173       1.93 1.300 81  -0.6525     4.52  1    
 201910       2.27 1.300 81  -0.3192     4.85  1    
 201236       2.47 1.300 81  -0.1192     5.05  1    
 200715       2.50 2.251 81  -1.9788     6.98  12   
 201823       2.63 1.300 81   0.0475     5.22  12   
 200659       2.63 1.300 81   0.0475     5.22  12   
 201889       2.67 1.300 81   0.0808     5.25  12   
 200488       2.97 1.300 81   0.3808     5.55  12   
 201895       3.00 2.251 81  -1.4788     7.48  12   
 201876       3.27 1.300 81   0.6808     5.85  12   
 201245       3.37 1.300 81   0.7808     5.95  12   
 200444       3.40 2.251 81  -1.0788     7.88  12   
 200726       3.53 1.300 81   0.9475     6.12  12   
 201836       3.57 1.300 81   0.9808     6.15  12   
 201162       3.57 1.300 81   0.9808     6.15  12   
 201875       3.83 1.300 81   1.2475     6.42  12   
 201859       3.90 1.300 81   1.3142     6.49  12   
 201153       4.20 1.300 81   1.6142     6.79  12   
 201025       4.23 1.300 81   1.6475     6.82  12   
 201879       4.37 1.300 81   1.7808     6.95  12   
 200496       4.53 1.300 81   1.9475     7.12  12   
 200939       4.63 1.300 81   2.0475     7.22  12   
 200661       4.70 1.300 81   2.1142     7.29  12   
 201887       4.70 2.251 81   0.2212     9.18  12   
 control_W    4.80 0.919 81   2.9715     6.63  12   
 200725       4.90 1.592 81   1.7330     8.07  12   
 201085       4.90 2.251 81   0.4212     9.38  12   
 200902       5.13 1.300 81   2.5475     7.72  12   
 200808       5.13 1.300 81   2.5475     7.72  12   
 200556       5.17 1.300 81   2.5808     7.75  12   
 201835       5.23 1.300 81   2.6475     7.82  12   
 201888       5.80 1.300 81   3.2142     8.39  12   
 201045       5.93 1.300 81   3.3475     8.52  12   
 201917       6.17 1.300 81   3.5808     8.75  12   
 201885       6.20 1.300 81   3.6142     8.79  12   
 201870       6.20 1.592 81   3.0330     9.37  12   
 200270       6.35 1.592 81   3.1830     9.52  12   
 201936       6.40 1.300 81   3.8142     8.99  12   
 200727       6.50 1.592 81   3.3330     9.67  12   
 201851       6.60 1.300 81   4.0142     9.19  12   
 control-WO   6.73 0.919 81   4.9049     8.56  12   
 200275       7.93 1.300 81   5.3475    10.52  12   
 200533       9.45 1.592 81   6.2830    12.62  12   
 201858       9.70 1.300 81   7.1142    12.29   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 46 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_1_DR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

1.1. - CLD - Mean Estimate Differences to Control_W

Compact Letter Display of estimates for Dry Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control (Control_W).

plot(CLD(lsmeans(lm_set_1_DR, trt.vs.ctrl~isolate,ref=45)$contrasts, alpha=0.1), main="Mean Dry Root Weight Differences of Inoculated Plants vs. Control_W", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

1.1. - CLD - Mean Estimate Differences to Control-WO

Compact Letter Display of estimates for Dry Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control (Control-WO).

plot(CLD(lsmeans(lm_set_1_DR, trt.vs.ctrl~isolate,ref=46)$contrasts, alpha=0.1), main="Mean Dry Root Weight Differences of Inoculated Plants vs. Control-WO", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

Based on the means comparison analyses above of the dry root weight measurements for plants of inoculation batch 1, there appears to be one isolate, BCW201858, that has a significant effect on the mean dry root weight. This is the most apparent when comparing to control_W, where the confidence intervals for these mean weight estimates do not overlap [see: 1.1 - CLD - Control_W (Pairwise by isolate)].

1.2. Dry Shoot Weight

# linear model of dry shoot data
lm_set_1_DS <- lm(mg ~ 1 + isolate, set_1_DS)
op = par(mfrow=c(1,2))
plot(lm_set_1_DS, which = c(2,3))
not plotting observations with leverage one:
  13, 35, 65, 69
par(op)

1.2. - Anova

anova(lm_set_1_DS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value    Pr(>F)    
isolate   45 5810.1 129.113  2.5566 0.0001118 ***
Residuals 82 4141.2  50.502                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

1.2. - LSMeans (Control_W) - Dunnett

lsm_s1.dun.DS <- summary(lsmeans(lm_set_1_DS, trt.vs.ctrl ~isolate, ref=45)$contrasts, infer = c(T,T))
write.csv(lsm_s1.dun.DS, "./lsmeans_summary_tables/lsm_s1.dun.DS.csv")

1.2. - LSMeans (Control-WO) - Dunnett

summary(lsmeans(lm_set_1_DS, trt.vs.ctrl ~isolate, ref=46)$contrasts, infer = c(T,T))
 contrast               estimate   SE df lower.CL upper.CL t.ratio p.value
 200270 - control-WO       9.233 5.80 82    -9.66    28.13  1.591  0.8518 
 200275 - control-WO       3.900 5.03 82   -12.46    20.26  0.776  0.9988 
 200444 - control-WO       5.033 7.68 82   -19.96    30.03  0.656  0.9997 
 200488 - control-WO      -1.167 5.03 82   -17.53    15.19 -0.232  1.0000 
 200496 - control-WO       1.833 5.03 82   -14.53    18.19  0.365  1.0000 
 200533 - control-WO      -4.067 5.80 82   -22.96    14.83 -0.701  0.9995 
 200556 - control-WO      -5.133 5.03 82   -21.49    11.23 -1.022  0.9903 
 200659 - control-WO       4.333 5.03 82   -12.03    20.69  0.862  0.9972 
 200661 - control-WO      10.233 5.03 82    -6.13    26.59  2.036  0.5831 
 200715 - control-WO      -8.067 7.68 82   -33.06    16.93 -1.051  0.9882 
 200725 - control-WO     -11.717 5.80 82   -30.61     7.18 -2.019  0.5949 
 200726 - control-WO       4.733 5.03 82   -11.63    21.09  0.942  0.9946 
 200727 - control-WO      19.100 5.03 82     2.74    35.46  3.801  0.0099 
 200808 - control-WO      -2.900 5.03 82   -19.26    13.46 -0.577  0.9999 
 200902 - control-WO       1.967 5.03 82   -14.39    18.33  0.391  1.0000 
 200939 - control-WO       6.167 5.03 82   -10.19    22.53  1.227  0.9665 
 201025 - control-WO       8.700 5.03 82    -7.66    25.06  1.731  0.7791 
 201045 - control-WO       8.000 5.03 82    -8.36    24.36  1.592  0.8515 
 201084 - control-WO     -11.967 5.03 82   -28.33     4.39 -2.381  0.3558 
 201085 - control-WO       3.733 7.68 82   -21.26    28.73  0.486  1.0000 
 201153 - control-WO      13.133 5.03 82    -3.23    29.49  2.614  0.2317 
 201162 - control-WO       2.867 5.03 82   -13.49    19.23  0.570  0.9999 
 201173 - control-WO      -2.767 5.03 82   -19.13    13.59 -0.551  0.9999 
 201236 - control-WO       4.467 5.03 82   -11.89    20.83  0.889  0.9965 
 201245 - control-WO       9.367 5.03 82    -6.99    25.73  1.864  0.6984 
 201823 - control-WO      -1.700 5.03 82   -18.06    14.66 -0.338  1.0000 
 201835 - control-WO      13.500 5.03 82    -2.86    29.86  2.687  0.1995 
 201836 - control-WO      10.100 5.03 82    -6.26    26.46  2.010  0.6013 
 201851 - control-WO       8.767 5.03 82    -7.59    25.13  1.745  0.7715 
 201858 - control-WO      -1.967 5.03 82   -18.33    14.39 -0.391  1.0000 
 201859 - control-WO       8.733 5.03 82    -7.63    25.09  1.738  0.7753 
 201870 - control-WO      -5.517 5.80 82   -24.41    13.38 -0.951  0.9942 
 201875 - control-WO       9.300 5.03 82    -7.06    25.66  1.851  0.7069 
 201876 - control-WO       6.633 5.03 82    -9.73    22.99  1.320  0.9473 
 201879 - control-WO       5.367 5.03 82   -10.99    21.73  1.068  0.9868 
 201885 - control-WO       8.667 5.03 82    -7.69    25.03  1.725  0.7829 
 201887 - control-WO      10.933 7.68 82   -14.06    35.93  1.424  0.9179 
 201888 - control-WO      -3.133 5.03 82   -19.49    13.23 -0.624  0.9998 
 201889 - control-WO       8.467 5.03 82    -7.89    24.83  1.685  0.8048 
 201895 - control-WO      -0.967 7.68 82   -25.96    24.03 -0.126  1.0000 
 201910 - control-WO      -3.333 5.03 82   -19.69    13.03 -0.663  0.9997 
 201917 - control-WO       7.567 5.03 82    -8.79    23.93  1.506  0.8886 
 201933 - control-WO      -7.967 7.68 82   -32.96    17.03 -1.038  0.9892 
 201936 - control-WO      14.167 5.03 82    -2.19    30.53  2.819  0.1494 
 control_W - control-WO   -1.983 4.10 82   -15.34    11.38 -0.483  1.0000 

Confidence level used: 0.95 
Conf-level adjustment: dunnettx method for 45 estimates 
P value adjustment: dunnettx method for 45 tests 

1.2 - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_1_DS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate    lsmean   SE df lower.CL upper.CL .group
 201084       5.20 4.10 82    -2.96     13.4  1    
 200725       5.45 5.03 82    -4.55     15.4  12   
 200715       9.10 7.11 82    -5.04     23.2  1234 
 201933       9.20 7.11 82    -4.94     23.3  1234 
 201870      11.65 5.03 82     1.65     21.6  1234 
 200556      12.03 4.10 82     3.87     20.2  123  
 200533      13.10 5.03 82     3.10     23.1  1234 
 201910      13.83 4.10 82     5.67     22.0  1234 
 201888      14.03 4.10 82     5.87     22.2  1234 
 200808      14.27 4.10 82     6.10     22.4  1234 
 201173      14.40 4.10 82     6.24     22.6  1234 
 control_W   15.18 2.90 82     9.41     21.0  123  
 201858      15.20 4.10 82     7.04     23.4  1234 
 201823      15.47 4.10 82     7.30     23.6  1234 
 200488      16.00 4.10 82     7.84     24.2  1234 
 201895      16.20 7.11 82     2.06     30.3  1234 
 control-WO  17.17 2.90 82    11.40     22.9  1234 
 200496      19.00 4.10 82    10.84     27.2  1234 
 200902      19.13 4.10 82    10.97     27.3  1234 
 201162      20.03 4.10 82    11.87     28.2  1234 
 201085      20.90 7.11 82     6.76     35.0  1234 
 200275      21.07 4.10 82    12.90     29.2  1234 
 200659      21.50 4.10 82    13.34     29.7  1234 
 201236      21.63 4.10 82    13.47     29.8  1234 
 200726      21.90 4.10 82    13.74     30.1  1234 
 200444      22.20 7.11 82     8.06     36.3  1234 
 201879      22.53 4.10 82    14.37     30.7  1234 
 200939      23.33 4.10 82    15.17     31.5  1234 
 201876      23.80 4.10 82    15.64     32.0  1234 
 201917      24.73 4.10 82    16.57     32.9  1234 
 201045      25.17 4.10 82    17.00     33.3  1234 
 201889      25.63 4.10 82    17.47     33.8  1234 
 201885      25.83 4.10 82    17.67     34.0  1234 
 201025      25.87 4.10 82    17.70     34.0  1234 
 201859      25.90 4.10 82    17.74     34.1  1234 
 201851      25.93 4.10 82    17.77     34.1  1234 
 200270      26.40 5.03 82    16.40     36.4  1234 
 201875      26.47 4.10 82    18.30     34.6  1234 
 201245      26.53 4.10 82    18.37     34.7  1234 
 201836      27.27 4.10 82    19.10     35.4  1234 
 200661      27.40 4.10 82    19.24     35.6  1234 
 201887      28.10 7.11 82    13.96     42.2  1234 
 201153      30.30 4.10 82    22.14     38.5   234 
 201835      30.67 4.10 82    22.50     38.8    34 
 201936      31.33 4.10 82    23.17     39.5    34 
 200727      36.27 4.10 82    28.10     44.4     4 

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 46 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_1_DS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

1.2. - CLD - Mean Estimate Differences to Control_W

Compact Letter Display of estimates for Dry Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control (Control_W).

plot(CLD(lsmeans(lm_set_1_DS, trt.vs.ctrl~isolate,ref=45)$contrasts, alpha=0.1), main="Mean Dry Shoot Weight Differences of Inoculated Plants vs. Control_W", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

1.2. - CLD - Mean Estimate Differences to Control-WO

Compact Letter Display of estimates for Dry Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control (Control-WO).

plot(CLD(lsmeans(lm_set_1_DS, trt.vs.ctrl~isolate,ref=46)$contrasts, alpha=0.1), main="Mean Dry Shoot Weight Differences of Inoculated Plants vs. Control-WO", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

BCW200727 has a mean estimate with non-overlaping Confidence intervals to those of the control_W estimate.

1.3. Wet Root Weight

# linear model of Wet Root data
lm_set_1_WR <- lm(mg ~ 1 + isolate, set_1_WR)
#op = par(mfrow=c(1,2))
plot(lm_set_1_WR, which = c(2,3))
not plotting observations with leverage one:
  13, 17, 35, 65, 69, 70, 108

#par(op)

1.3. - Anova

anova(lm_set_1_WR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value    Pr(>F)    
isolate   46 133403 2900.06   3.146 3.444e-06 ***
Residuals 80  73745  921.82                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(lm_set_1_WR, infer=c(T,T))

Call:
lm(formula = mg ~ 1 + isolate, data = set_1_WR)

Residuals:
    Min      1Q  Median      3Q     Max 
-91.333 -11.783   0.167  10.600  77.517 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)         91.400     21.469   4.257 5.59e-05 ***
isolate200275       42.500     27.716   1.533  0.12912    
isolate200444      -59.200     37.185  -1.592  0.11532    
isolate200488      -50.867     27.716  -1.835  0.07018 .  
isolate200496      -29.933     27.716  -1.080  0.28339    
isolate200533       62.400     30.361   2.055  0.04312 *  
isolate200556       65.233     27.716   2.354  0.02105 *  
isolate200659      -51.267     27.716  -1.850  0.06805 .  
isolate200661      -55.267     27.716  -1.994  0.04956 *  
isolate200715      -87.700     37.185  -2.358  0.02079 *  
isolate200725      -30.750     30.361  -1.013  0.31421    
isolate200726      -50.967     27.716  -1.839  0.06964 .  
isolate200727      -51.567     27.716  -1.861  0.06648 .  
isolate200808      -40.767     27.716  -1.471  0.14525    
isolate200902        4.033     27.716   0.146  0.88466    
isolate200939      -28.267     27.716  -1.020  0.31087    
isolate201025      -21.267     27.716  -0.767  0.44516    
isolate201045      -13.267     27.716  -0.479  0.63348    
isolate201084      -70.300     27.716  -2.536  0.01314 *  
isolate201085      -19.400     37.185  -0.522  0.60331    
isolate201153      -30.000     30.361  -0.988  0.32608    
isolate201162      -34.333     27.716  -1.239  0.21906    
isolate201173      -70.133     27.716  -2.530  0.01335 *  
isolate201236      -48.000     27.716  -1.732  0.08715 .  
isolate201245      -74.750     30.361  -2.462  0.01597 *  
isolate201823      -73.433     27.716  -2.649  0.00971 ** 
isolate201835      -21.967     27.716  -0.793  0.43038    
isolate201836      -43.167     27.716  -1.557  0.12331    
isolate201851       23.600     27.716   0.851  0.39704    
isolate201856       -6.500     37.185  -0.175  0.86168    
isolate201858      -53.900     27.716  -1.945  0.05532 .  
isolate201859      -36.667     27.716  -1.323  0.18962    
isolate201870       11.850     30.361   0.390  0.69735    
isolate201875      -44.600     27.716  -1.609  0.11152    
isolate201876      -36.400     27.716  -1.313  0.19283    
isolate201879      -44.200     27.716  -1.595  0.11471    
isolate201885       20.100     27.716   0.725  0.47044    
isolate201887      -28.000     37.185  -0.753  0.45366    
isolate201888      -45.167     27.716  -1.630  0.10711    
isolate201889      -34.467     27.716  -1.244  0.21729    
isolate201895       -7.400     37.185  -0.199  0.84276    
isolate201910      -50.967     27.716  -1.839  0.06964 .  
isolate201917       -3.833     27.716  -0.138  0.89035    
isolate201933      -76.400     37.185  -2.055  0.04318 *  
isolate201936        5.833     27.716   0.210  0.83384    
isolatecontrol_W   -30.617     24.790  -1.235  0.22043    
isolatecontrol-WO  -21.717     24.790  -0.876  0.38364    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 30.36 on 80 degrees of freedom
  (59 observations deleted due to missingness)
Multiple R-squared:  0.644, Adjusted R-squared:  0.4393 
F-statistic: 3.146 on 46 and 80 DF,  p-value: 3.444e-06

1.3. - LSMeans (Control_W)

lsm_s1.dun.WR <- summary(lsmeans(lm_set_1_WR, trt.vs.ctrl ~isolate, ref=46)$contrasts, infer = c(T,T))
write.csv(lsm_s1.dun.WR, "./lsmeans_summary_tables/lsm_s1.dun.WR.csv")

1.3. - LSMeans (Control-WO)

summary(lsmeans(lm_set_1_WR, trt.vs.ctrl ~isolate, ref=46)$contrasts, infer = c(T,T))
 contrast               estimate   SE df lower.CL upper.CL t.ratio p.value
 200270 - control_W       30.617 24.8 80   -50.31    111.5  1.235  0.9665 
 200275 - control_W       73.117 21.5 80     3.03    143.2  3.406  0.0337 
 200444 - control_W      -28.583 32.8 80  -135.65     78.5 -0.872  0.9972 
 200488 - control_W      -20.250 21.5 80   -90.34     49.8 -0.943  0.9949 
 200496 - control_W        0.683 21.5 80   -69.41     70.8  0.032  1.0000 
 200533 - control_W       93.017 24.8 80    12.09    173.9  3.752  0.0119 
 200556 - control_W       95.850 21.5 80    25.76    165.9  4.465  0.0011 
 200659 - control_W      -20.650 21.5 80   -90.74     49.4 -0.962  0.9941 
 200661 - control_W      -24.650 21.5 80   -94.74     45.4 -1.148  0.9793 
 200715 - control_W      -57.083 32.8 80  -164.15     50.0 -1.741  0.7782 
 200725 - control_W       -0.133 24.8 80   -81.06     80.8 -0.005  1.0000 
 200726 - control_W      -20.350 21.5 80   -90.44     49.7 -0.948  0.9947 
 200727 - control_W      -20.950 21.5 80   -91.04     49.1 -0.976  0.9934 
 200808 - control_W      -10.150 21.5 80   -80.24     59.9 -0.473  1.0000 
 200902 - control_W       34.650 21.5 80   -35.44    104.7  1.614  0.8448 
 200939 - control_W        2.350 21.5 80   -67.74     72.4  0.109  1.0000 
 201025 - control_W        9.350 21.5 80   -60.74     79.4  0.436  1.0000 
 201045 - control_W       17.350 21.5 80   -52.74     87.4  0.808  0.9984 
 201084 - control_W      -39.683 21.5 80  -109.77     30.4 -1.848  0.7132 
 201085 - control_W       11.217 32.8 80   -95.85    118.3  0.342  1.0000 
 201153 - control_W        0.617 24.8 80   -80.31     81.5  0.025  1.0000 
 201162 - control_W       -3.717 21.5 80   -73.81     66.4 -0.173  1.0000 
 201173 - control_W      -39.517 21.5 80  -109.61     30.6 -1.841  0.7181 
 201236 - control_W      -17.383 21.5 80   -87.47     52.7 -0.810  0.9984 
 201245 - control_W      -44.133 24.8 80  -125.06     36.8 -1.780  0.7550 
 201823 - control_W      -42.817 21.5 80  -112.91     27.3 -1.994  0.6170 
 201835 - control_W        8.650 21.5 80   -61.44     78.7  0.403  1.0000 
 201836 - control_W      -12.550 21.5 80   -82.64     57.5 -0.585  0.9999 
 201851 - control_W       54.217 21.5 80   -15.87    124.3  2.525  0.2792 
 201856 - control_W       24.117 32.8 80   -82.95    131.2  0.735  0.9993 
 201858 - control_W      -23.283 21.5 80   -93.37     46.8 -1.085  0.9860 
 201859 - control_W       -6.050 21.5 80   -76.14     64.0 -0.282  1.0000 
 201870 - control_W       42.467 24.8 80   -38.46    123.4  1.713  0.7937 
 201875 - control_W      -13.983 21.5 80   -84.07     56.1 -0.651  0.9997 
 201876 - control_W       -5.783 21.5 80   -75.87     64.3 -0.269  1.0000 
 201879 - control_W      -13.583 21.5 80   -83.67     56.5 -0.633  0.9998 
 201885 - control_W       50.717 21.5 80   -19.37    120.8  2.362  0.3720 
 201887 - control_W        2.617 32.8 80  -104.45    109.7  0.080  1.0000 
 201888 - control_W      -14.550 21.5 80   -84.64     55.5 -0.678  0.9996 
 201889 - control_W       -3.850 21.5 80   -73.94     66.2 -0.179  1.0000 
 201895 - control_W       23.217 32.8 80   -83.85    130.3  0.708  0.9995 
 201910 - control_W      -20.350 21.5 80   -90.44     49.7 -0.948  0.9947 
 201917 - control_W       26.783 21.5 80   -43.31     96.9  1.248  0.9643 
 201933 - control_W      -45.783 32.8 80  -152.85     61.3 -1.396  0.9291 
 201936 - control_W       36.450 21.5 80   -33.64    106.5  1.698  0.8020 
 control-WO - control_W    8.900 17.5 80   -48.33     66.1  0.508  1.0000 

Confidence level used: 0.95 
Conf-level adjustment: dunnettx method for 46 estimates 
P value adjustment: dunnettx method for 46 tests 
View(set_1_DR)

1.3 - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_1_WR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate    lsmean   SE df lower.CL upper.CL .group
 200715        3.7 30.4 80   -56.72     64.1  123  
 201933       15.0 30.4 80   -45.42     75.4  1234 
 201245       16.6 21.5 80   -26.07     59.4  12   
 201823       18.0 17.5 80   -16.92     52.9  1    
 201084       21.1 17.5 80   -13.78     56.0  12   
 201173       21.3 17.5 80   -13.62     56.2  12   
 200444       32.2 30.4 80   -28.22     92.6  12345
 200661       36.1 17.5 80     1.25     71.0  12   
 201858       37.5 17.5 80     2.62     72.4  12   
 200727       39.8 17.5 80     4.95     74.7  123  
 200659       40.1 17.5 80     5.25     75.0  123  
 201910       40.4 17.5 80     5.55     75.3  123  
 200726       40.4 17.5 80     5.55     75.3  123  
 200488       40.5 17.5 80     5.65     75.4  123  
 201236       43.4 17.5 80     8.52     78.3  123  
 201888       46.2 17.5 80    11.35     81.1  1234 
 201875       46.8 17.5 80    11.92     81.7  1234 
 201879       47.2 17.5 80    12.32     82.1  1234 
 201836       48.2 17.5 80    13.35     83.1  1234 
 200808       50.6 17.5 80    15.75     85.5  1234 
 201859       54.7 17.5 80    19.85     89.6  1234 
 201876       55.0 17.5 80    20.12     89.9  1234 
 201889       56.9 17.5 80    22.05     91.8  1234 
 201162       57.1 17.5 80    22.18     92.0  1234 
 200725       60.6 21.5 80    17.93    103.4  12345
 control_W    60.8 12.4 80    36.12     85.5  1234 
 201153       61.4 21.5 80    18.68    104.1  12345
 200496       61.5 17.5 80    26.58     96.4  12345
 200939       63.1 17.5 80    28.25     98.0  12345
 201887       63.4 30.4 80     2.98    123.8  12345
 201835       69.4 17.5 80    34.55    104.3  12345
 control-WO   69.7 12.4 80    45.02     94.4  1234 
 201025       70.1 17.5 80    35.25    105.0  12345
 201085       72.0 30.4 80    11.58    132.4  12345
 201045       78.1 17.5 80    43.25    113.0  12345
 201895       84.0 30.4 80    23.58    144.4  12345
 201856       84.9 30.4 80    24.48    145.3  12345
 201917       87.6 17.5 80    52.68    122.5  12345
 200270       91.4 21.5 80    48.68    134.1  12345
 200902       95.4 17.5 80    60.55    130.3  12345
 201936       97.2 17.5 80    62.35    132.1  12345
 201870      103.2 21.5 80    60.53    146.0  12345
 201885      111.5 17.5 80    76.62    146.4  12345
 201851      115.0 17.5 80    80.12    149.9   2345
 200275      133.9 17.5 80    99.02    168.8    345
 200533      153.8 21.5 80   111.08    196.5     45
 200556      156.6 17.5 80   121.75    191.5      5

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 47 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_1_WR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

1.3. - CLD - Mean Estimate Differences to Control_W

Compact Letter Display of estimates for Wet Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control (Control_W).

plot(CLD(lsmeans(lm_set_1_WR, trt.vs.ctrl~isolate,ref=45)$contrasts, alpha=0.1), main="Mean Wet Root Weight Differences of Inoculated Plants vs. Control_W", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

1.3. - CLD - Mean Estimate Differences to Control-WO

Compact Letter Display of estimates for Wet Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control (Control-WO).

plot(CLD(lsmeans(lm_set_1_WR, trt.vs.ctrl~isolate,ref=46)$contrasts, alpha=0.1), main="Mean Wet Root Weight Differences of Inoculated Plants vs. Control-WO", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

Regarding wet root mass in milligrams, isolate BCW200556 does not exhibit a mean estimate with a CI that overlaps with those of mean estimates from both controls. This implies the effect is significant at the alpha = 0.1 level.

1.4. Wet Shoot Weight

# linear model of Wet shoot data
lm_set_1_WS <- lm(mg ~ 1 + isolate, set_1_WS)
op = par(mfrow=c(1,2))
plot(lm_set_1_WS, which = c(2,3))
not plotting observations with leverage one:
  13, 35, 65, 69, 70, 109
par(op)

1.4. - Anova

anova(lm_set_1_WS)
Analysis of Variance Table

Response: mg
          Df  Sum Sq Mean Sq F value    Pr(>F)    
isolate   46 1496704   32537  2.3648 0.0003359 ***
Residuals 82 1128210   13759                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
summary(lm_set_1_WS)

Call:
lm(formula = mg ~ 1 + isolate, data = set_1_WS)

Residuals:
     Min       1Q   Median       3Q      Max 
-230.467  -55.800   -0.433   58.433  248.433 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)         470.40      82.94   5.671 2.06e-07 ***
isolate200275      -128.63     107.08  -1.201  0.23309    
isolate200444      -130.10     143.66  -0.906  0.36779    
isolate200488      -251.00     107.08  -2.344  0.02149 *  
isolate200496      -197.53     107.08  -1.845  0.06868 .  
isolate200533      -299.55     117.30  -2.554  0.01251 *  
isolate200556      -128.10     107.08  -1.196  0.23501    
isolate200659      -143.63     107.08  -1.341  0.18349    
isolate200661       -85.87     107.08  -0.802  0.42492    
isolate200715      -322.00     143.66  -2.241  0.02770 *  
isolate200725      -333.25     117.30  -2.841  0.00567 ** 
isolate200726      -126.07     107.08  -1.177  0.24246    
isolate200727        60.33     107.08   0.563  0.57466    
isolate200808      -231.53     107.08  -2.162  0.03351 *  
isolate200902      -174.83     107.08  -1.633  0.10635    
isolate200939       -75.33     107.08  -0.704  0.48371    
isolate201025       -41.77     107.08  -0.390  0.69750    
isolate201045       -91.67     107.08  -0.856  0.39445    
isolate201084      -448.90     107.08  -4.192 6.93e-05 ***
isolate201085      -232.10     143.66  -1.616  0.11002    
isolate201153        -9.90     107.08  -0.092  0.92656    
isolate201162      -137.10     107.08  -1.280  0.20402    
isolate201173      -248.27     107.08  -2.319  0.02291 *  
isolate201236      -116.67     107.08  -1.090  0.27910    
isolate201245       -43.47     107.08  -0.406  0.68585    
isolate201823      -249.97     107.08  -2.334  0.02202 *  
isolate201835       110.63     107.08   1.033  0.30454    
isolate201836        11.47     107.08   0.107  0.91498    
isolate201851      -167.20     107.08  -1.561  0.12226    
isolate201856      -445.70     143.66  -3.102  0.00263 ** 
isolate201858      -131.53     107.08  -1.228  0.22281    
isolate201859       -81.20     107.08  -0.758  0.45043    
isolate201870      -279.90     117.30  -2.386  0.01932 *  
isolate201875       -61.40     107.08  -0.573  0.56793    
isolate201876       -59.40     107.08  -0.555  0.58058    
isolate201879       -76.13     107.08  -0.711  0.47909    
isolate201885       -77.53     107.08  -0.724  0.47107    
isolate201887       -18.30     143.66  -0.127  0.89895    
isolate201888      -233.23     107.08  -2.178  0.03226 *  
isolate201889      -111.00     107.08  -1.037  0.30295    
isolate201895      -191.10     143.66  -1.330  0.18713    
isolate201910      -222.53     107.08  -2.078  0.04081 *  
isolate201917      -131.10     107.08  -1.224  0.22433    
isolate201933      -329.20     143.66  -2.292  0.02450 *  
isolate201936       -74.83     107.08  -0.699  0.48661    
isolatecontrol_W   -186.88      95.77  -1.951  0.05443 .  
isolatecontrol-WO  -166.73      95.77  -1.741  0.08545 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 117.3 on 82 degrees of freedom
  (57 observations deleted due to missingness)
Multiple R-squared:  0.5702,    Adjusted R-squared:  0.3291 
F-statistic: 2.365 on 46 and 82 DF,  p-value: 0.0003359

1.4. - LSMeans (Control_W)

lsm_s1.dun.WS <- summary(lsmeans(lm_set_1_WS, trt.vs.ctrl ~isolate, ref=46)$contrasts, infer = c(T,T))
write.csv(lsm_s1.dun.WS, "./lsmeans_summary_tables/lsm_s1.dun.WS.csv")

1.4. - LSMeans (Control-WO)

summary(lsmeans(lm_set_1_WS, trt.vs.ctrl ~isolate, ref=47)$contrasts, infer = c(T,T))
 contrast               estimate    SE df lower.CL upper.CL t.ratio p.value
 200270 - control-WO     166.733  95.8 82  -145.72    479.2  1.741  0.7781 
 200275 - control-WO      38.100  82.9 82  -232.49    308.7  0.459  1.0000 
 200444 - control-WO      36.633 126.7 82  -376.70    450.0  0.289  1.0000 
 200488 - control-WO     -84.267  82.9 82  -354.86    186.3 -1.016  0.9912 
 200496 - control-WO     -30.800  82.9 82  -301.39    239.8 -0.371  1.0000 
 200533 - control-WO    -132.817  95.8 82  -445.27    179.6 -1.387  0.9319 
 200556 - control-WO      38.633  82.9 82  -231.96    309.2  0.466  1.0000 
 200659 - control-WO      23.100  82.9 82  -247.49    293.7  0.279  1.0000 
 200661 - control-WO      80.867  82.9 82  -189.72    351.5  0.975  0.9935 
 200715 - control-WO    -155.267 126.7 82  -568.60    258.1 -1.226  0.9682 
 200725 - control-WO    -166.517  95.8 82  -478.97    145.9 -1.739  0.7794 
 200726 - control-WO      40.667  82.9 82  -229.92    311.3  0.490  1.0000 
 200727 - control-WO     227.067  82.9 82   -43.52    497.7  2.738  0.1816 
 200808 - control-WO     -64.800  82.9 82  -335.39    205.8 -0.781  0.9988 
 200902 - control-WO      -8.100  82.9 82  -278.69    262.5 -0.098  1.0000 
 200939 - control-WO      91.400  82.9 82  -179.19    362.0  1.102  0.9844 
 201025 - control-WO     124.967  82.9 82  -145.62    395.6  1.507  0.8914 
 201045 - control-WO      75.067  82.9 82  -195.52    345.7  0.905  0.9963 
 201084 - control-WO    -282.167  82.9 82  -552.76    -11.6 -3.402  0.0338 
 201085 - control-WO     -65.367 126.7 82  -478.70    348.0 -0.516  1.0000 
 201153 - control-WO     156.833  82.9 82  -113.76    427.4  1.891  0.6860 
 201162 - control-WO      29.633  82.9 82  -240.96    300.2  0.357  1.0000 
 201173 - control-WO     -81.533  82.9 82  -352.12    189.1 -0.983  0.9931 
 201236 - control-WO      50.067  82.9 82  -220.52    320.7  0.604  0.9999 
 201245 - control-WO     123.267  82.9 82  -147.32    393.9  1.486  0.8992 
 201823 - control-WO     -83.233  82.9 82  -353.82    187.4 -1.004  0.9920 
 201835 - control-WO     277.367  82.9 82     6.78    548.0  3.344  0.0399 
 201836 - control-WO     178.200  82.9 82   -92.39    448.8  2.148  0.5114 
 201851 - control-WO      -0.467  82.9 82  -271.06    270.1 -0.006  1.0000 
 201856 - control-WO    -278.967 126.7 82  -692.30    134.4 -2.202  0.4753 
 201858 - control-WO      35.200  82.9 82  -235.39    305.8  0.424  1.0000 
 201859 - control-WO      85.533  82.9 82  -185.06    356.1  1.031  0.9902 
 201870 - control-WO    -113.167  95.8 82  -425.62    199.3 -1.182  0.9750 
 201875 - control-WO     105.333  82.9 82  -165.26    375.9  1.270  0.9601 
 201876 - control-WO     107.333  82.9 82  -163.26    377.9  1.294  0.9551 
 201879 - control-WO      90.600  82.9 82  -179.99    361.2  1.092  0.9853 
 201885 - control-WO      89.200  82.9 82  -181.39    359.8  1.075  0.9868 
 201887 - control-WO     148.433 126.7 82  -264.90    561.8  1.172  0.9764 
 201888 - control-WO     -66.500  82.9 82  -337.09    204.1 -0.802  0.9985 
 201889 - control-WO      55.733  82.9 82  -214.86    326.3  0.672  0.9996 
 201895 - control-WO     -24.367 126.7 82  -437.70    389.0 -0.192  1.0000 
 201910 - control-WO     -55.800  82.9 82  -326.39    214.8 -0.673  0.9996 
 201917 - control-WO      35.633  82.9 82  -234.96    306.2  0.430  1.0000 
 201933 - control-WO    -162.467 126.7 82  -575.80    250.9 -1.282  0.9576 
 201936 - control-WO      91.900  82.9 82  -178.69    362.5  1.108  0.9838 
 control_W - control-WO  -20.150  67.7 82  -241.09    200.8 -0.298  1.0000 

Confidence level used: 0.95 
Conf-level adjustment: dunnettx method for 46 estimates 
P value adjustment: dunnettx method for 46 tests 

1.4 - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_1_WS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate    lsmean    SE df lower.CL upper.CL .group
 201084       21.5  67.7 82  -113.22      156  1    
 201856       24.7 117.3 82  -208.64      258  12   
 200725      137.2  82.9 82   -27.85      302  12   
 201933      141.2 117.3 82   -92.14      375  123  
 200715      148.4 117.3 82   -84.94      382  123  
 200533      170.8  82.9 82     5.85      336  123  
 201870      190.5  82.9 82    25.50      355  123  
 200488      219.4  67.7 82    84.68      354  123  
 201823      220.4  67.7 82    85.71      355  123  
 201173      222.1  67.7 82    87.41      357  123  
 201888      237.2  67.7 82   102.45      372  123  
 201085      238.3 117.3 82     4.96      472  123  
 200808      238.9  67.7 82   104.15      374  123  
 201910      247.9  67.7 82   113.15      383  123  
 200496      272.9  67.7 82   138.15      408  123  
 201895      279.3 117.3 82    45.96      513  123  
 control_W   283.5  47.9 82   188.26      379  123  
 200902      295.6  67.7 82   160.85      430  123  
 201851      303.2  67.7 82   168.48      438  123  
 control-WO  303.7  47.9 82   208.41      399  123  
 200659      326.8  67.7 82   192.05      461  123  
 201162      333.3  67.7 82   198.58      468  123  
 201858      338.9  67.7 82   204.15      474  123  
 201917      339.3  67.7 82   204.58      474  123  
 200444      340.3 117.3 82   106.96      574  123  
 200275      341.8  67.7 82   207.05      476  123  
 200556      342.3  67.7 82   207.58      477  123  
 200726      344.3  67.7 82   209.61      479  123  
 201236      353.7  67.7 82   219.01      488  123  
 201889      359.4  67.7 82   224.68      494  123  
 201045      378.7  67.7 82   244.01      513  123  
 200661      384.5  67.7 82   249.81      519  123  
 201859      389.2  67.7 82   254.48      524  123  
 201885      392.9  67.7 82   258.15      528  123  
 201879      394.3  67.7 82   259.55      529   23  
 200939      395.1  67.7 82   260.35      530   23  
 201936      395.6  67.7 82   260.85      530   23  
 201875      409.0  67.7 82   274.28      544   23  
 201876      411.0  67.7 82   276.28      546   23  
 201245      426.9  67.7 82   292.21      562   23  
 201025      428.6  67.7 82   293.91      563   23  
 201887      452.1 117.3 82   218.76      685  123  
 201153      460.5  67.7 82   325.78      595   23  
 200270      470.4  82.9 82   305.40      635   23  
 201836      481.9  67.7 82   347.15      617   23  
 200727      530.7  67.7 82   396.01      665   23  
 201835      581.0  67.7 82   446.31      716    3  

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 47 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_1_WS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

1.4. - CLD - Mean Estimate Differences to Control_W

Compact Letter Display of estimates for Wet Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control (Control_W).

plot(CLD(lsmeans(lm_set_1_WS, trt.vs.ctrl~isolate,ref=45)$contrasts, alpha=0.1), main="Mean Wet Shoot Weight Differences of Inoculated Plants vs. Control_W", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

1.4. - CLD - Mean Estimate Differences to Control-WO

Compact Letter Display of estimates for Wet Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control (Control-WO).

plot(CLD(lsmeans(lm_set_1_WS, trt.vs.ctrl~isolate,ref=46)$contrasts, alpha=0.1), main="Mean Wet Shoot Weight Differences of Inoculated Plants vs. Control-WO", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

None of the mean estimates for inoculated isolates have non-overlapping confidence intervals with those of non-inoculated controls.

Batch 2.1

# analyze set 2.1 data
str(set_2.1)
'data.frame':   600 obs. of  4 variables:
 $ isolate: chr  "200498" "200498" "200498" "200498" ...
 $ rep    : int  1 1 1 1 1 1 2 2 2 2 ...
 $ sample : chr  "WS" "WR" "DS" "DR" ...
 $ mg     : num  78.5 32.5 7.8 2.7 47512.1 ...
#subset by sample type
set_2.1_DR <- filter(set_2.1, sample == "DR")
set_2.1_DS <- filter(set_2.1, sample == "DS")
set_2.1_WR <- filter(set_2.1, sample == "WR")
set_2.1_WS <- filter(set_2.1, sample == "WS")

Experimental Design Table

Structure Factor Type # levels
Treatment Isolate Qualitative 33
Design MS Media Slants Experimental Unit 99
Response Plant Tissue Weight Observational Unit 396
Response Dry Root Weight (DR) Variable 99
Response Dry Shoot Weight (DS) Variable 99
Response Wet Root Weight (WR) Variable 99
Response Wet Shoot Weight (WS) Variable 99
  • Four sets of inoculations were setup independently, each with independent controls.
  • Each set of isolates was treated as an independent experiment for the analysis.

2.1.1. Dry Root Weight

# linear model of dry root data
lm_set_2.1_DR <- lm(mg ~ 1 + isolate, set_2.1_DR)
op = par(mfrow=c(1,2))
plot(lm_set_2.1_DR, which = c(2,3))
par(op)

2.1.1. - Anova

# assess variance - but the data isn't normal
anova(lm_set_2.1_DR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value  Pr(>F)  
isolate   30 233.93  7.7978    1.84 0.02169 *
Residuals 62 262.75  4.2379                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

2.1.1. - LSMeans - Dunnett

lsm_s2.1.dun.DR <- summary(lsmeans(lm_set_2.1_DR, trt.vs.ctrl ~isolate, ref=31)$contrasts, infer = c(T,T))
write.csv(lsm_s2.1.dun.DR, "./lsmeans_summary_tables/lsm_s2.1.dun.DR.csv")

2.1.1. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_2.1_DR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200723    1.77 1.19 62   -0.609     4.14  1    
 201894    2.10 1.19 62   -0.276     4.48  12   
 201303    2.13 1.19 62   -0.243     4.51  12   
 200498    2.63 1.19 62    0.254     5.01  123  
 200596    2.73 1.19 62    0.357     5.11  123  
 200662    3.13 1.19 62    0.757     5.51  123  
 201187    3.37 1.19 62    0.991     5.74  123  
 201882    3.40 1.46 62    0.490     6.31  123  
 control   3.50 1.03 62    1.442     5.56  123  
 200328    3.53 1.19 62    1.157     5.91  123  
 201090    3.73 1.19 62    1.357     6.11  123  
 201883    3.80 1.19 62    1.424     6.18  123  
 201862    3.87 1.19 62    1.491     6.24  123  
 200279    3.90 1.19 62    1.524     6.28  123  
 200443    4.03 1.19 62    1.657     6.41  123  
 201866    4.13 1.19 62    1.757     6.51  123  
 200955    4.20 1.19 62    1.824     6.58  123  
 201884    4.20 1.19 62    1.824     6.58  123  
 200566    4.33 1.19 62    1.957     6.71  123  
 201878    4.33 1.19 62    1.957     6.71  123  
 200505    4.37 1.19 62    1.991     6.74  123  
 201886    4.43 1.19 62    2.057     6.81  123  
 200621    5.13 1.19 62    2.757     7.51  123  
 200810    5.50 1.19 62    3.124     7.88  123  
 201867    5.50 1.19 62    3.124     7.88  123  
 200926    5.73 1.19 62    3.357     8.11  123  
 201809    5.80 1.19 62    3.424     8.18  123  
 201831    6.17 1.19 62    3.791     8.54  123  
 200539    7.30 1.19 62    4.924     9.68  123  
 201864    8.07 1.19 62    5.691    10.44   23  
 201873    8.43 1.19 62    6.057    10.81    3  

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 31 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_2.1_DR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

2.1.1. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_2.1_DR, trt.vs.ctrl~isolate,ref=31)$contrasts, alpha=0.1), main="Mean Dry Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

Dry root data suggests that isolate BCW201884 significantly increases root weight of the potato plantlets. I am suspecious of this result and need to check the manually recorded datasheets. The data entered for this isolate could have received a typo during data entry (likely based on the triplicate set entered: 3.6, 87.3, 1.7).

2.1.2. Dry Shoot Weight

# linear model of dry shoot data
lm_set_2.1_DS <- lm(mg ~ 1 + isolate, set_2.1_DS)
op = par(mfrow=c(1,2))
plot(lm_set_2.1_DS, which = c(2,3))
par(op)

2.1.2. - Anova

# assess variance
anova(lm_set_2.1_DS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)  
isolate   30 2494.8  83.159   1.686 0.0418 *
Residuals 62 3058.1  49.324                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

2.1.2. - LSMeans - Dunnett

lsm_s2.1.dun.DS <- summary(lsmeans(lm_set_2.1_DS, trt.vs.ctrl ~isolate, ref=31)$contrasts, infer = c(T,T))
write.csv(lsm_s2.1.dun.DS, "./lsmeans_summary_tables/lsm_s2.1.dun.DS.csv")

2.1.2 - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_2.1_DS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200498    6.97 4.05 62    -1.14     15.1  1    
 control   9.75 3.51 62     2.73     16.8  1    
 200723   10.93 4.05 62     2.83     19.0  12   
 201883   11.30 4.05 62     3.19     19.4  12   
 200596   12.93 4.05 62     4.83     21.0  12   
 201090   13.13 4.05 62     5.03     21.2  12   
 200926   13.53 4.05 62     5.43     21.6  12   
 201882   13.60 4.97 62     3.67     23.5  12   
 201894   14.03 4.05 62     5.93     22.1  12   
 200279   14.93 4.05 62     6.83     23.0  12   
 201303   15.20 4.05 62     7.09     23.3  12   
 201866   15.57 4.05 62     7.46     23.7  12   
 201862   15.63 4.05 62     7.53     23.7  12   
 201878   15.77 4.05 62     7.66     23.9  12   
 200505   15.90 4.05 62     7.79     24.0  12   
 201187   16.27 4.05 62     8.16     24.4  12   
 200328   16.43 4.05 62     8.33     24.5  12   
 201886   17.70 4.05 62     9.59     25.8  12   
 200443   18.23 4.05 62    10.13     26.3  12   
 200621   19.43 4.05 62    11.33     27.5  12   
 200662   20.67 4.05 62    12.56     28.8  12   
 200566   20.77 4.05 62    12.66     28.9  12   
 201809   21.13 4.05 62    13.03     29.2  12   
 201831   21.37 4.05 62    13.26     29.5  12   
 201867   21.90 4.05 62    13.79     30.0  12   
 201884   22.33 4.05 62    14.23     30.4  12   
 200539   22.50 4.05 62    14.39     30.6  12   
 200955   22.63 4.05 62    14.53     30.7  12   
 201864   24.60 4.05 62    16.49     32.7  12   
 201873   25.27 4.05 62    17.16     33.4  12   
 200810   31.50 4.05 62    23.39     39.6   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 31 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_2.1_DS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

2.1.2. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_2.1_DS, trt.vs.ctrl~isolate,ref=31)$contrasts, alpha=0.1), main="Mean Dry Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

The difference between the control and BCW200810 is statistically significant at an alpha level of 0.1.

2.1.3. Wet Root Weight

# linear model of wet root data
lm_set_2.1_WR <- lm(mg ~ 1 + isolate, set_2.1_WR)
op = par(mfrow=c(1,2))
plot(lm_set_2.1_WR, which = c(2,3))
par(op)

2.1.3. - Anova

#assess variance
anova(lm_set_2.1_WR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)  
isolate   30  44211 1473.71  1.9916 0.0112 *
Residuals 62  45877  739.96                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

2.1.3. - LSMeans - Dunnett

lsm_s2.1.dun.WR <- summary(lsmeans(lm_set_2.1_WR, trt.vs.ctrl ~isolate, ref=31)$contrasts, infer = c(T,T))
write.csv(lsm_s2.1.dun.WR, "./lsmeans_summary_tables/lsm_s2.1.dun.WR.csv")

2.1.3. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_2.1_WR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200723    24.7 15.7 62    -6.73     56.1  1    
 201303    33.0 15.7 62     1.57     64.4  12   
 200498    36.5 15.7 62     5.11     67.9  12   
 control   37.5 13.6 62    10.31     64.7  12   
 200662    37.8 15.7 62     6.44     69.2  12   
 200443    38.9 15.7 62     7.47     70.3  12   
 201894    39.0 15.7 62     7.61     70.4  12   
 200596    40.9 15.7 62     9.47     72.3  12   
 201187    42.4 15.7 62    11.01     73.8  12   
 201883    44.3 15.7 62    12.91     75.7  12   
 201878    44.6 15.7 62    13.17     76.0  12   
 200328    45.8 15.7 62    14.44     77.2  12   
 200566    47.5 15.7 62    16.11     78.9  12   
 200505    48.6 15.7 62    17.24     80.0  12   
 201884    49.5 15.7 62    18.14     80.9  12   
 201862    49.9 15.7 62    18.51     81.3  12   
 201090    50.3 15.7 62    18.91     81.7  12   
 201882    50.8 19.2 62    12.35     89.2  12   
 201886    51.1 15.7 62    19.71     82.5  12   
 200621    51.8 15.7 62    20.44     83.2  12   
 201866    52.3 15.7 62    20.87     83.7  12   
 200279    53.5 15.7 62    22.11     84.9  12   
 200955    55.7 15.7 62    24.34     87.1  12   
 200926    72.5 15.7 62    41.07    103.9  12   
 201867    75.8 15.7 62    44.37    107.2  12   
 200539    79.4 15.7 62    47.97    110.8  12   
 201831    79.9 15.7 62    48.47    111.3  12   
 200810    98.4 15.7 62    67.01    129.8  12   
 201809    99.6 15.7 62    68.17    131.0  12   
 201864   102.9 15.7 62    71.54    134.3  12   
 201873   107.9 15.7 62    76.54    139.3   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 31 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_2.1_WR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

2.1.3. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_2.1_WR, trt.vs.ctrl~isolate,ref=31)$contrasts, alpha=0.1), main="Mean Wet Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

Based on the modeling and the plot of mean wet root weights, the cluster of four isolates with mean wet root differences around 60 mg appear to be strong candidates. Isolates BCW201873, BCW200810, BCW201809, BCW201864.

2.1.4. Wet Shoot Weight

# linear model of wet shoot data
lm_set_2.1_WS <- lm(mg ~ 1 + isolate, set_2.1_WS)
op = par(mfrow=c(1,2))
plot(lm_set_2.1_WS, which = c(2,3))
par(op)

2.1.4. - Anova

# assess variance
anova(lm_set_2.1_WS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value  Pr(>F)  
isolate   30 604682   20156  1.9486 0.01353 *
Residuals 62 641310   10344                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

2.1.4. - LSMeans - Dunnett

lsm_s2.1.dun.WS <- summary(lsmeans(lm_set_2.1_WS, trt.vs.ctrl ~isolate, ref=31)$contrasts, infer = c(T,T))
write.csv(lsm_s2.1.dun.WS, "./lsmeans_summary_tables/lsm_s2.1.dun.WS.csv")

2.1.4. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_2.1_DS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200498    6.97 4.05 62    -1.14     15.1  1    
 control   9.75 3.51 62     2.73     16.8  1    
 200723   10.93 4.05 62     2.83     19.0  12   
 201883   11.30 4.05 62     3.19     19.4  12   
 200596   12.93 4.05 62     4.83     21.0  12   
 201090   13.13 4.05 62     5.03     21.2  12   
 200926   13.53 4.05 62     5.43     21.6  12   
 201882   13.60 4.97 62     3.67     23.5  12   
 201894   14.03 4.05 62     5.93     22.1  12   
 200279   14.93 4.05 62     6.83     23.0  12   
 201303   15.20 4.05 62     7.09     23.3  12   
 201866   15.57 4.05 62     7.46     23.7  12   
 201862   15.63 4.05 62     7.53     23.7  12   
 201878   15.77 4.05 62     7.66     23.9  12   
 200505   15.90 4.05 62     7.79     24.0  12   
 201187   16.27 4.05 62     8.16     24.4  12   
 200328   16.43 4.05 62     8.33     24.5  12   
 201886   17.70 4.05 62     9.59     25.8  12   
 200443   18.23 4.05 62    10.13     26.3  12   
 200621   19.43 4.05 62    11.33     27.5  12   
 200662   20.67 4.05 62    12.56     28.8  12   
 200566   20.77 4.05 62    12.66     28.9  12   
 201809   21.13 4.05 62    13.03     29.2  12   
 201831   21.37 4.05 62    13.26     29.5  12   
 201867   21.90 4.05 62    13.79     30.0  12   
 201884   22.33 4.05 62    14.23     30.4  12   
 200539   22.50 4.05 62    14.39     30.6  12   
 200955   22.63 4.05 62    14.53     30.7  12   
 201864   24.60 4.05 62    16.49     32.7  12   
 201873   25.27 4.05 62    17.16     33.4  12   
 200810   31.50 4.05 62    23.39     39.6   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 31 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_2.1_WS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

2.1.4. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_2.1_DS, trt.vs.ctrl~isolate,ref=31)$contrasts, alpha=0.1), main="Mean Dry Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

The mean wet shoot weight for BCW200810 is significantly different from that of the control at an alpha level of 0.1

Batch 2.2

# analyze set 2.2 data
str(set_2.2)
'data.frame':   600 obs. of  4 variables:
 $ isolate: chr  "201152" "201152" "201152" "201152" ...
 $ rep    : int  1 1 1 1 1 1 2 2 2 2 ...
 $ sample : chr  "WS" "WR" "DS" "DR" ...
 $ mg     : num  287.2 43.7 23.8 3.5 48003.8 ...
#subset by sample type
set_2.2_DR <- filter(set_2.2, sample == "DR")
set_2.2_DS <- filter(set_2.2, sample == "DS")
set_2.2_WR <- filter(set_2.2, sample == "WR")
set_2.2_WS <- filter(set_2.2, sample == "WS")

Experimental Design Table

Structure Factor Type # levels
Treatment Isolate Qualitative 33
Design MS Media Slants Experimental Unit 99
Response Plant Tissue Weight Observational Unit 396
Response Dry Root Weight (DR) Variable 99
Response Dry Shoot Weight (DS) Variable 99
Response Wet Root Weight (WR) Variable 99
Response Wet Shoot Weight (WS) Variable 99

2.2.1. Dry Root Weight

# linear model of dry root data
lm_set_2.2_DR <- lm(mg ~ 1 + isolate, set_2.2_DR)
op = par(mfrow=c(1,2))
plot(lm_set_2.2_DR, which = c(2,3))
par(op)

2.2.1. - Anova

# assess variance - but the data isn't normal
anova(lm_set_2.2_DR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value  Pr(>F)  
isolate   31 264.52  8.5329  1.5173 0.07941 .
Residuals 65 365.53  5.6236                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

2.2.1. - LSMeans - Dunnett

lsm_s2.2.dun.DR <- summary(lsmeans(lm_set_2.2_DR, trt.vs.ctrl ~isolate, ref=32)$contrasts, infer = c(T,T))
write.csv(lsm_s2.2.dun.DR, "./lsmeans_summary_tables/lsm_s2.2.dun.DR.csv")

2.2.1. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_2.2_DR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200599   0.867 1.37 65  -1.8677     3.60  1    
 200821   1.900 1.37 65  -0.8344     4.63  1    
 201901   2.667 1.37 65  -0.0677     5.40  12   
 201152   2.833 1.37 65   0.0990     5.57  12   
 200460   3.267 1.37 65   0.5323     6.00  12   
 200446   3.367 1.37 65   0.6323     6.10  12   
 200634   3.400 1.37 65   0.6656     6.13  12   
 200986   3.733 1.37 65   0.9990     6.47  12   
 201845   3.800 1.37 65   1.0656     6.53  12   
 200561   3.833 1.37 65   1.0990     6.57  12   
 201957   3.833 1.37 65   1.0990     6.57  12   
 control  4.075 1.19 65   1.7070     6.44  12   
 201083   4.233 1.37 65   1.4990     6.97  12   
 201926   4.333 1.37 65   1.5990     7.07  12   
 200266   4.600 1.37 65   1.8656     7.33  12   
 200473   4.633 1.37 65   1.8990     7.37  12   
 201079   4.667 1.37 65   1.9323     7.40  12   
 200665   4.833 1.37 65   2.0990     7.57  12   
 201254   5.000 1.37 65   2.2656     7.73  12   
 201185   5.067 1.37 65   2.3323     7.80  12   
 201808   5.200 1.37 65   2.4656     7.93  12   
 201260   5.367 1.37 65   2.6323     8.10  12   
 201098   5.467 1.37 65   2.7323     8.20  12   
 201896   5.567 1.37 65   2.8323     8.30  12   
 200648   5.600 1.37 65   2.8656     8.33  12   
 201175   5.700 1.37 65   2.9656     8.43  12   
 201056   6.000 1.37 65   3.2656     8.73  12   
 200883   6.200 1.37 65   3.4656     8.93  12   
 201915   6.633 1.37 65   3.8990     9.37  12   
 200547   7.500 1.37 65   4.7656    10.23  12   
 201176   7.767 1.37 65   5.0323    10.50  12   
 201849   9.100 1.37 65   6.3656    11.83   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 32 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_2.2_DR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

2.2.1. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_2.2_DR, trt.vs.ctrl~isolate,ref=32)$contrasts, alpha=0.1), main="Mean Dry Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

BCW201849 has a dry root weight that is significantly higher than the control.

2.2.2. Dry Shoot Weight

# linear model of dry shoot data
lm_set_2.2_DS <- lm(mg ~ 1 + isolate, set_2.2_DS)
op = par(mfrow=c(1,2))
plot(lm_set_2.2_DS, which = c(2,3))
par(op)

2.2.2. - Anova

# assess variance
anova(lm_set_2.2_DS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value   Pr(>F)   
isolate   31 4883.5 157.532  2.2711 0.002753 **
Residuals 65 4508.7  69.364                    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

2.2.2. - LSMeans - Dunnett

lsm_s2.2.dun.DS <- summary(lsmeans(lm_set_2.2_DS, trt.vs.ctrl ~isolate, ref=32)$contrasts, infer = c(T,T))
write.csv(lsm_s2.2.dun.DS, "./lsmeans_summary_tables/lsm_s2.2.dun.DS.csv")

2.2.2. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_2.2_DS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200599     7.8 4.81 65    -1.80     17.4  1    
 201901    10.8 4.81 65     1.16     20.4  1    
 200821    11.1 4.81 65     1.50     20.7  1    
 201056    13.0 4.81 65     3.36     22.6  1    
 200561    13.0 4.81 65     3.40     22.6  1    
 control   13.4 4.16 65     5.13     21.8  1    
 201957    13.5 4.81 65     3.93     23.1  1    
 200986    13.8 4.81 65     4.16     23.4  1    
 200665    15.9 4.81 65     6.33     25.5  1    
 201926    16.9 4.81 65     7.30     26.5  1    
 201260    17.0 4.81 65     7.36     26.6  1    
 200460    17.6 4.81 65     8.03     27.2  1    
 201808    19.1 4.81 65     9.50     28.7  12   
 201254    20.8 4.81 65    11.16     30.4  12   
 201098    21.0 4.81 65    11.40     30.6  12   
 200266    21.5 4.81 65    11.93     31.1  12   
 200634    21.6 4.81 65    12.03     31.2  12   
 201152    22.3 4.81 65    12.66     31.9  12   
 200648    22.5 4.81 65    12.90     32.1  12   
 201083    22.8 4.81 65    13.20     32.4  12   
 201185    23.8 4.81 65    14.16     33.4  12   
 201845    23.9 4.81 65    14.33     33.5  12   
 201175    24.2 4.81 65    14.56     33.8  12   
 201079    25.9 4.81 65    16.26     35.5  12   
 201176    26.6 4.81 65    17.00     36.2  12   
 201915    27.0 4.81 65    17.36     36.6  12   
 201896    27.3 4.81 65    17.66     36.9  12   
 200473    27.6 4.81 65    17.96     37.2  12   
 200446    28.2 4.81 65    18.63     37.8  12   
 200547    28.8 4.81 65    19.20     38.4  12   
 200883    29.3 4.81 65    19.73     38.9  12   
 201849    42.8 4.81 65    33.20     52.4   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 32 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_2.2_DS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

2.2.2. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_2.2_DS, trt.vs.ctrl~isolate,ref=32)$contrasts, alpha=0.1), main="Mean Dry Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

BCW201849 also has a mean dry shoot weight that is statistically significant from that of the control at an alpha level of 0.1.

2.2.3. Wet Root Weight

# linear model of wet root data
lm_set_2.2_WR <- lm(mg ~ 1 + isolate, set_2.2_WR)
op = par(mfrow=c(1,2))
plot(lm_set_2.2_WR, which = c(2,3))
par(op)

2.2.3. - Anova

# assess variance
anova(lm_set_2.2_WR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value  Pr(>F)  
isolate   31  51631  1665.5  1.5425 0.07158 .
Residuals 65  70186  1079.8                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

2.2.3. - LSMeans - Dunnett

lsm_s2.2.dun.WR <- summary(lsmeans(lm_set_2.2_WR, trt.vs.ctrl ~isolate, ref=32)$contrasts, infer = c(T,T))
write.csv(lsm_s2.2.dun.WR, "./lsmeans_summary_tables/lsm_s2.2.dun.WR.csv")

2.2.3. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_2.2_WR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200599    9.33 19.0 65  -28.556     47.2  1    
 200821   21.27 19.0 65  -16.623     59.2  12   
 201901   27.77 19.0 65  -10.123     65.7  12   
 201152   37.50 19.0 65   -0.389     75.4  12   
 200446   42.50 19.0 65    4.611     80.4  12   
 200561   42.60 19.0 65    4.711     80.5  12   
 201845   43.23 19.0 65    5.344     81.1  12   
 200634   44.33 19.0 65    6.444     82.2  12   
 201926   45.20 19.0 65    7.311     83.1  12   
 200986   48.67 19.0 65   10.777     86.6  12   
 200460   49.30 19.0 65   11.411     87.2  12   
 200473   52.70 19.0 65   14.811     90.6  12   
 control  53.05 16.4 65   20.237     85.9  12   
 201957   54.33 19.0 65   16.444     92.2  12   
 201260   54.43 19.0 65   16.544     92.3  12   
 201083   56.13 19.0 65   18.244     94.0  12   
 200266   56.47 19.0 65   18.577     94.4  12   
 200665   56.73 19.0 65   18.844     94.6  12   
 201185   58.60 19.0 65   20.711     96.5  12   
 201079   59.60 19.0 65   21.711     97.5  12   
 201808   62.50 19.0 65   24.611    100.4  12   
 200648   63.97 19.0 65   26.077    101.9  12   
 201056   65.07 19.0 65   27.177    103.0  12   
 201254   69.43 19.0 65   31.544    107.3  12   
 201098   71.00 19.0 65   33.111    108.9  12   
 201915   72.53 19.0 65   34.644    110.4  12   
 200883   80.73 19.0 65   42.844    118.6  12   
 201896   83.53 19.0 65   45.644    121.4  12   
 201175   92.50 19.0 65   54.611    130.4  12   
 201176   92.80 19.0 65   54.911    130.7  12   
 200547  111.70 19.0 65   73.811    149.6   2   
 201849  119.93 19.0 65   82.044    157.8   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 32 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_2.2_WR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

2.2.3. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_2.2_WR, trt.vs.ctrl~isolate,ref=31)$contrasts, alpha=0.1), main="Mean Wet Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

None of the isolates have non-overlapping confidence intervals for their wet root weight mean esimates.

2.2.4. Wet Shoot Weight

# linear model of wet shoot data
lm_set_2.2_WS <- lm(mg ~ 1 + isolate, set_2.2_WS)
op = par(mfrow=c(1,2))
plot(lm_set_2.2_WS, which = c(2,3))
par(op)

2.2.4. - Anova

# assess variance
anova(lm_set_2.2_WS)
Analysis of Variance Table

Response: mg
          Df  Sum Sq Mean Sq F value   Pr(>F)   
isolate   31 1320679   42603   2.264 0.002845 **
Residuals 65 1223127   18817                    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

2.2.4. - LSMeans - Dunnett

lsm_s2.2.dun.WS <- summary(lsmeans(lm_set_2.2_WS, trt.vs.ctrl ~isolate, ref=32)$contrasts, infer = c(T,T))
write.csv(lsm_s2.2.dun.WS, "./lsmeans_summary_tables/lsm_s2.2.dun.WS.csv")

2.2.4. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_2.2_WS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200599    93.6 79.2 65   -64.54      252  1    
 200821   143.4 79.2 65   -14.77      302  1    
 201901   143.4 79.2 65   -14.77      302  1    
 201056   154.3 79.2 65    -3.84      313  1    
 200561   169.1 79.2 65    10.96      327  1    
 200986   174.4 79.2 65    16.23      333  1    
 201957   175.9 79.2 65    17.76      334  1    
 200665   197.9 79.2 65    39.76      356  1    
 201260   210.3 79.2 65    52.10      368  1    
 201926   217.0 79.2 65    58.83      375  1    
 200460   217.3 79.2 65    59.10      375  1    
 control  224.8 68.6 65    87.87      362  1    
 201808   241.3 79.2 65    83.10      399  12   
 201098   249.0 79.2 65    90.80      407  12   
 201083   279.4 79.2 65   121.26      438  12   
 201152   284.5 79.2 65   126.36      443  12   
 200648   290.5 79.2 65   132.30      449  12   
 200634   299.6 79.2 65   141.46      458  12   
 201845   309.5 79.2 65   151.30      468  12   
 200266   309.8 79.2 65   151.66      468  12   
 201185   332.0 79.2 65   173.86      490  12   
 201079   334.8 79.2 65   176.60      493  12   
 201254   349.1 79.2 65   190.90      507  12   
 200473   361.2 79.2 65   203.06      519  12   
 201915   367.2 79.2 65   209.00      525  12   
 201176   400.5 79.2 65   242.30      559  12   
 200446   410.6 79.2 65   252.40      569  12   
 200883   410.7 79.2 65   252.56      569  12   
 201175   432.6 79.2 65   274.40      591  12   
 201896   453.9 79.2 65   295.76      612  12   
 200547   474.0 79.2 65   315.80      632  12   
 201849   640.1 79.2 65   481.90      798   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 32 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_2.2_WS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

2.2.4. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_2.2_WS, trt.vs.ctrl~isolate,ref=32)$contrasts, alpha=0.1), main="Mean Wet Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

BCW201849 has a mean wet shoot weight that is statistically significant from that of the control at an alpha level of 0.1

Batch 2.3

# analyze set 2.3 data
str(set_2.3)
'data.frame':   600 obs. of  4 variables:
 $ isolate: chr  "200449" "200449" "200449" "200449" ...
 $ rep    : int  1 1 1 1 1 1 2 2 2 2 ...
 $ sample : chr  "WS" "WR" "DS" "DR" ...
 $ mg     : num  180.6 41.8 18.8 4 49207.1 ...
#subset by sample type
set_2.3_DR <- filter(set_2.3, sample == "DR")
set_2.3_DS <- filter(set_2.3, sample == "DS")
set_2.3_WR <- filter(set_2.3, sample == "WR")
set_2.3_WS <- filter(set_2.3, sample == "WS")

Experimental Design Table

Structure Factor Type # levels
Treatment Isolate Qualitative 29
Design MS Media Slants Experimental Unit 87
Response Plant Tissue Weight Observational Unit 348
Response Dry Root Weight (DR) Variable 87
Response Dry Shoot Weight (DS) Variable 87
Response Wet Root Weight (WR) Variable 87
Response Wet Shoot Weight (WS) Variable 87

2.3.1. Dry Root Weight

# linear model of dry root data
lm_set_2.3_DR <- lm(mg ~ 1 + isolate, set_2.3_DR)
op = par(mfrow=c(1,2))
plot(lm_set_2.3_DR, which = c(2,3))
not plotting observations with leverage one:
  36
par(op)

2.3.1. - Anova

# assess variance 
anova(lm_set_2.3_DR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   25 229.94  9.1975  0.7591 0.7698
Residuals 50 605.78 12.1156               

There appears to be no significant differences among the fitted values based on the anova.

2.3.1. - LSMeans - Dunnett

lsm_s2.3.dun.DR <- summary(lsmeans(lm_set_2.3_DR, trt.vs.ctrl ~isolate, ref=26)$contrasts, infer = c(T,T))
write.csv(lsm_s2.3.dun.DR, "./lsmeans_summary_tables/lsm_s2.3.dun.DR.csv")

2.3.1. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_2.3_DR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 201847    2.80 2.01 50   -1.236     6.84  1    
 201877    2.83 2.01 50   -1.203     6.87  1    
 201302    3.20 2.01 50   -0.836     7.24  1    
 200669    3.37 2.01 50   -0.670     7.40  1    
 200449    3.47 2.01 50   -0.570     7.50  1    
 201838    3.60 2.01 50   -0.436     7.64  1    
 201350    3.70 2.01 50   -0.336     7.74  1    
 200724    4.17 2.01 50    0.130     8.20  1    
 control   4.33 1.74 50    0.829     7.82  1    
 200607    4.37 2.01 50    0.330     8.40  1    
 201826    4.87 2.01 50    0.830     8.90  1    
 200517    4.97 2.01 50    0.930     9.00  1    
 201871    5.07 2.01 50    1.030     9.10  1    
 201848    5.23 2.01 50    1.197     9.27  1    
 200600    5.27 2.01 50    1.230     9.30  1    
 201812    5.40 3.48 50   -1.591    12.39  1    
 200529    5.47 2.01 50    1.430     9.50  1    
 200307    6.13 2.01 50    2.097    10.17  1    
 200274    6.17 2.01 50    2.130    10.20  1    
 201881    6.27 2.01 50    2.230    10.30  1    
 200736    6.35 2.46 50    1.406    11.29  1    
 201972    7.03 2.01 50    2.997    11.07  1    
 200567    7.13 2.01 50    3.097    11.17  1    
 201703    7.43 2.01 50    3.397    11.47  1    
 200885    7.93 2.01 50    3.897    11.97  1    
 200938   10.07 2.01 50    6.030    14.10  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 26 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_2.3_DR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

2.3.1. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_2.3_DR, trt.vs.ctrl~isolate,ref=26)$contrasts, alpha=0.1), main="Mean Dry Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

BCW201881 has a higher mean estimate for dry root weight than the control with non-overlapping confidence intervals.

2.3.2. Dry Shoot Weight

# linear model of dry shoot data
lm_set_2.3_DS <- lm(mg ~ 1 + isolate, set_2.3_DS)
op = par(mfrow=c(1,2))
plot(lm_set_2.3_DS, which = c(2,3))
not plotting observations with leverage one:
  36
par(op)

2.3.2. - Anova

# assess variance
anova(lm_set_2.3_DS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   25 1588.1  63.525  0.6598 0.8693
Residuals 50 4813.7  96.275               

2.3.2. - LSMeans - Dunnett

lsm_s2.3.dun.DS <- summary(lsmeans(lm_set_2.3_DS, trt.vs.ctrl ~isolate, ref=26)$contrasts, infer = c(T,T))
write.csv(lsm_s2.3.dun.DS, "./lsmeans_summary_tables/lsm_s2.3.dun.DS.csv")

2.3.2. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_2.3_DS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 201847    13.0 5.66 50    1.588     24.3  1    
 200529    19.3 5.66 50    7.955     30.7  1    
 200885    19.4 5.66 50    8.022     30.8  1    
 200449    20.3 5.66 50    8.888     31.6  1    
 201812    20.5 9.81 50    0.792     40.2  1    
 200307    20.7 5.66 50    9.355     32.1  1    
 201871    20.8 5.66 50    9.455     32.2  1    
 200517    20.9 5.66 50    9.488     32.2  1    
 201877    21.1 5.66 50    9.688     32.4  1    
 200607    21.3 5.66 50    9.922     32.7  1    
 201848    21.4 5.66 50   10.022     32.8  1    
 201302    21.5 5.66 50   10.155     32.9  1    
 200600    22.0 5.66 50   10.622     33.4  1    
 201703    22.1 5.66 50   10.688     33.4  1    
 control   22.4 4.91 50   12.496     32.2  1    
 200669    22.6 5.66 50   11.255     34.0  1    
 201350    23.6 5.66 50   12.255     35.0  1    
 200736    24.2 6.94 50   10.314     38.2  1    
 201838    24.3 5.66 50   12.955     35.7  1    
 201826    24.4 5.66 50   13.022     35.8  1    
 200274    25.0 5.66 50   13.622     36.4  1    
 201881    26.2 5.66 50   14.855     37.6  1    
 200567    29.8 5.66 50   18.422     41.2  1    
 200724    30.7 5.66 50   19.288     42.0  1    
 201972    32.6 5.66 50   21.222     44.0  1    
 200938    35.3 5.66 50   23.888     46.6  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 26 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_2.3_DS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

2.3.2. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_2.3_DS, trt.vs.ctrl~isolate,ref=26)$contrasts, alpha=0.1), main="Mean Dry Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

All of the isolates have means with confidence intervals that overlap with that of the control for set 2.3

2.3.3. Wet Root Weight

# linear model of wet root data
lm_set_2.3_WR <- lm(mg ~ 1 + isolate, set_2.3_WR)
op = par(mfrow=c(1,2))
plot(lm_set_2.3_WR, which = c(2,3))
not plotting observations with leverage one:
  36
par(op)

2.3.3 - Anova

# assess variance
anova(lm_set_2.3_WR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   25  28986  1159.4  0.7627  0.766
Residuals 50  76013  1520.3               

2.3.3. - LSMeans - Dunnett

lsm_s2.3.dun.WR <- summary(lsmeans(lm_set_2.3_WR, trt.vs.ctrl ~isolate, ref=26)$contrasts, infer = c(T,T))
write.csv(lsm_s2.3.dun.WR, "./lsmeans_summary_tables/lsm_s2.3.dun.WR.csv")

2.3.3. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_2.3_WR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 201847    32.8 22.5 50  -12.382     78.0  1    
 200938    35.8 22.5 50   -9.415     81.0  1    
 200669    36.9 22.5 50   -8.315     82.1  1    
 201877    37.2 22.5 50   -8.015     82.4  1    
 201302    37.8 22.5 50   -7.415     83.0  1    
 200449    38.0 22.5 50   -7.182     83.2  1    
 201838    45.3 22.5 50    0.118     90.5  1    
 201350    50.9 22.5 50    5.685     96.1  1    
 200724    54.2 22.5 50    8.952     99.4  1    
 200607    56.7 22.5 50   11.518    101.9  1    
 200517    57.3 22.5 50   12.118    102.5  1    
 201812    57.4 39.0 50  -20.915    135.7  1    
 200600    59.2 22.5 50   13.952    104.4  1    
 200274    62.4 22.5 50   17.152    107.6  1    
 201826    63.2 22.5 50   18.018    108.4  1    
 201871    63.3 22.5 50   18.118    108.5  1    
 201848    65.0 22.5 50   19.785    110.2  1    
 200529    67.3 22.5 50   22.052    112.5  1    
 control   70.2 19.5 50   31.043    109.4  1    
 200736    74.7 27.6 50   19.323    130.1  1    
 201881    74.7 22.5 50   29.518    119.9  1    
 201703    77.2 22.5 50   31.952    122.4  1    
 200307    80.7 22.5 50   35.518    125.9  1    
 201972    89.5 22.5 50   44.318    134.7  1    
 200567    93.8 22.5 50   48.552    139.0  1    
 200885   111.6 22.5 50   66.352    156.8  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 26 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_2.3_WR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

2.3.3. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_2.3_WR, trt.vs.ctrl~isolate,ref=26)$contrasts, alpha=0.1), main="Mean Wet Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

Wet Root data shows all isolate mean estimates have Confidence Intervals that overlap.

2.3.4. Wet Shoot Weight

# linear model of Wet shoot data
lm_set_2.3_WS <- lm(mg ~ 1 + isolate, set_2.3_WS)
op = par(mfrow=c(1,2))
plot(lm_set_2.3_WS, which = c(2,3))
not plotting observations with leverage one:
  36
par(op)

2.3.4. - Anova

# assess variance
anova(lm_set_2.3_WS)
Analysis of Variance Table

Response: mg
          Df  Sum Sq Mean Sq F value Pr(>F)
isolate   25  404716   16189  0.7062 0.8258
Residuals 50 1146222   22924               

Anova shows similar result to dry shoot.

2.3.4. - LSMeans - Dunnett

lsm_s2.3.dun.WS <- summary(lsmeans(lm_set_2.3_WS, trt.vs.ctrl ~isolate, ref=26)$contrasts, infer = c(T,T))
write.csv(lsm_s2.3.dun.WS, "./lsmeans_summary_tables/lsm_s2.3.dun.WS.csv")

2.3.4. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_2.3_DS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 201847    13.0 5.66 50    1.588     24.3  1    
 200529    19.3 5.66 50    7.955     30.7  1    
 200885    19.4 5.66 50    8.022     30.8  1    
 200449    20.3 5.66 50    8.888     31.6  1    
 201812    20.5 9.81 50    0.792     40.2  1    
 200307    20.7 5.66 50    9.355     32.1  1    
 201871    20.8 5.66 50    9.455     32.2  1    
 200517    20.9 5.66 50    9.488     32.2  1    
 201877    21.1 5.66 50    9.688     32.4  1    
 200607    21.3 5.66 50    9.922     32.7  1    
 201848    21.4 5.66 50   10.022     32.8  1    
 201302    21.5 5.66 50   10.155     32.9  1    
 200600    22.0 5.66 50   10.622     33.4  1    
 201703    22.1 5.66 50   10.688     33.4  1    
 control   22.4 4.91 50   12.496     32.2  1    
 200669    22.6 5.66 50   11.255     34.0  1    
 201350    23.6 5.66 50   12.255     35.0  1    
 200736    24.2 6.94 50   10.314     38.2  1    
 201838    24.3 5.66 50   12.955     35.7  1    
 201826    24.4 5.66 50   13.022     35.8  1    
 200274    25.0 5.66 50   13.622     36.4  1    
 201881    26.2 5.66 50   14.855     37.6  1    
 200567    29.8 5.66 50   18.422     41.2  1    
 200724    30.7 5.66 50   19.288     42.0  1    
 201972    32.6 5.66 50   21.222     44.0  1    
 200938    35.3 5.66 50   23.888     46.6  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 26 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_2.3_DS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

2.3.4. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_2.3_DS, trt.vs.ctrl~isolate,ref=26)$contrasts, alpha=0.1), main="Mean Wet Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

All isolates means and CI’s overlap with the control.

Batch 2.4

# analyze set 2.4 data
str(set_2.4)
'data.frame':   672 obs. of  4 variables:
 $ isolate: chr  "201814" "201814" "201814" "201814" ...
 $ rep    : int  1 1 1 1 1 1 2 2 2 2 ...
 $ sample : chr  "WS" "WR" "DS" "DR" ...
 $ mg     : num  403.7 43.8 30.3 4.6 47528.7 ...
#subset by sample type
set_2.4_DR <- filter(set_2.4, sample == "DR")
set_2.4_DS <- filter(set_2.4, sample == "DS")
set_2.4_WR <- filter(set_2.4, sample == "WR")
set_2.4_WS <- filter(set_2.4, sample == "WS")

Experimental Design Table

Structure Factor Type # levels
Treatment Isolate Qualitative 37
Design MS Media Slants Experimental Unit 111
Response Plant Tissue Weight Observational Unit 444
Response Dry Root Weight (DR) Variable 111
Response Dry Shoot Weight (DS) Variable 111
Response Wet Root Weight (WR) Variable 111
Response Wet Shoot Weight (WS) Variable 111

2.4.1. Dry Root Weight

# linear model of dry root data for set 2.4
lm_set_2.4_DR <- lm(mg ~ 1 + isolate, set_2.4_DR)
op = par(mfrow=c(1,2))
plot(lm_set_2.4_DR, which = c(2,3))
par(op)

2.4.1. - Anova

# assess variance
anova(lm_set_2.4_DR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value   Pr(>F)   
isolate   35 160.20  4.5772  1.9855 0.007161 **
Residuals 72 165.98  2.3053                    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

2.4.1. - LSMeans - Dunnett

lsm_s2.4.dun.DR <- summary(lsmeans(lm_set_2.4_DR, trt.vs.ctrl ~isolate, ref=36)$contrasts, infer = c(T,T))
write.csv(lsm_s2.4.dun.DR, "./lsmeans_summary_tables/lsm_s2.4.dun.DR.csv")

2.4.1. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_2.4_DR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean    SE df lower.CL upper.CL .group
 200598    1.97 0.877 72   0.2192     3.71  1    
 200882    2.20 1.074 72   0.0598     4.34  1    
 201151    2.30 0.877 72   0.5525     4.05  1    
 201097    2.57 0.877 72   0.8192     4.31  1    
 201872    2.63 0.877 72   0.8859     4.38  1    
 201833    2.70 0.877 72   0.9525     4.45  1    
 200570    2.77 0.877 72   1.0192     4.51  1    
 201263    2.83 0.877 72   1.0859     4.58  1    
 200552    2.90 0.877 72   1.1525     4.65  1    
 control   3.00 0.759 72   1.4866     4.51  1    
 201019    3.17 0.877 72   1.4192     4.91  1    
 200722    3.17 0.877 72   1.4192     4.91  1    
 200920    3.17 0.877 72   1.4192     4.91  1    
 201850    3.27 0.877 72   1.5192     5.01  1    
 201827    3.30 0.877 72   1.5525     5.05  1    
 200718    3.30 0.877 72   1.5525     5.05  1    
 201853    3.40 0.877 72   1.6525     5.15  1    
 200565    3.40 0.877 72   1.6525     5.15  1    
 201832    3.47 0.877 72   1.7192     5.21  1    
 201865    3.57 0.877 72   1.8192     5.31  1    
 201150    3.60 0.877 72   1.8525     5.35  1    
 201290    3.60 0.877 72   1.8525     5.35  1    
 200705    3.63 0.877 72   1.8859     5.38  1    
 200991    3.70 0.877 72   1.9525     5.45  1    
 201939    4.37 0.877 72   2.6192     6.11  12   
 201184    4.40 0.877 72   2.6525     6.15  12   
 200470    4.40 0.877 72   2.6525     6.15  12   
 200828    4.50 0.877 72   2.7525     6.25  12   
 200642    4.60 0.877 72   2.8525     6.35  12   
 200620    4.77 0.877 72   3.0192     6.51  12   
 201814    5.00 0.877 72   3.2525     6.75  12   
 200904    5.00 0.877 72   3.2525     6.75  12   
 200847    5.03 0.877 72   3.2859     6.78  12   
 201819    5.27 0.877 72   3.5192     7.01  12   
 200487    5.47 0.877 72   3.7192     7.21  12   
 201900    8.63 0.877 72   6.8859    10.38   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 36 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_2.4_DR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

2.4.1. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_2.4_DR, trt.vs.ctrl~isolate,ref=36)$contrasts, alpha=0.1), main="Mean Dry Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

BCW201900 has a mean dry root weight with non-overlapping confidence intervals relative to those of the control, when compared at an alpha level of 0.1. The mean of 8.63 mg is nearly three times higher than that of the control, which is 3.0 mg.

2.4.2. Dry Shoot Weight

# linear model of dry shoot data from set 2.4
lm_set_2.4_DS <- lm(mg ~ 1 + isolate, set_2.4_DS)
op = par(mfrow=c(1,2))
plot(lm_set_2.4_DS, which = c(2,3))
par(op)

2.4.2. - Anova

# assess variance
anova(lm_set_2.4_DS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value    Pr(>F)    
isolate   35 4865.1 139.002  3.0942 2.553e-05 ***
Residuals 72 3234.5  44.923                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

2.4.2. - LSMeans - Dunnett

lsm_s2.4.dun.DS <- summary(lsmeans(lm_set_2.4_DS, trt.vs.ctrl ~isolate, ref=36)$contrasts, infer = c(T,T))
write.csv(lsm_s2.4.dun.DS, "./lsmeans_summary_tables/lsm_s2.4.dun.DS.csv")

2.4.2. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_2.4_DS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200882    11.5 4.74 72     2.05     20.9  1    
 200565    12.4 3.87 72     4.69     20.1  1    
 201833    12.6 3.87 72     4.92     20.3  1    
 200722    12.7 3.87 72     4.99     20.4  1    
 201151    14.4 3.87 72     6.69     22.1  1    
 200598    14.7 3.87 72     6.99     22.4  1    
 200642    15.8 3.87 72     8.05     23.5  1    
 control   16.0 3.35 72     9.29     22.7  1    
 200470    16.3 3.87 72     8.59     24.0  1    
 201290    16.6 3.87 72     8.92     24.3  1    
 201097    16.7 3.87 72     9.02     24.4  1    
 200705    16.9 3.87 72     9.19     24.6  1    
 200828    17.2 3.87 72     9.45     24.9  1    
 201853    17.4 3.87 72     9.69     25.1  1    
 200552    18.1 3.87 72    10.42     25.8  1    
 200991    18.2 3.87 72    10.49     25.9  1    
 201939    18.5 3.87 72    10.75     26.2  1    
 201819    18.5 3.87 72    10.79     26.2  1    
 201850    18.8 3.87 72    11.09     26.5  1    
 201832    19.5 3.87 72    11.79     27.2  1    
 201872    19.9 3.87 72    12.19     27.6  12   
 200570    20.8 3.87 72    13.12     28.5  12   
 201827    20.9 3.87 72    13.22     28.6  12   
 201184    21.1 3.87 72    13.39     28.8  12   
 200920    22.5 3.87 72    14.79     30.2  123  
 200904    23.2 3.87 72    15.52     30.9  123  
 200718    23.2 3.87 72    15.52     30.9  123  
 200620    24.2 3.87 72    16.52     31.9  123  
 201263    24.4 3.87 72    16.65     32.1  123  
 200847    26.4 3.87 72    18.69     34.1  123  
 200487    26.5 3.87 72    18.79     34.2  123  
 201019    27.8 3.87 72    20.05     35.5  123  
 201150    28.6 3.87 72    20.85     36.3  123  
 201865    29.1 3.87 72    21.42     36.8  123  
 201814    40.2 3.87 72    32.45     47.9   23  
 201900    41.9 3.87 72    34.19     49.6    3  

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 36 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_2.4_DS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

2.4.2. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_2.4_DS, trt.vs.ctrl~isolate,ref=36)$contrasts, alpha=0.1), main="Mean Dry Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

BCW201814 and BCW201900 both have means with confidence intervals that do not overlap with the mean of the control for isolate set 2.4 (at an alpha level of 0.1)

2.4.3. Wet Root Weight

# linear model of Wet Root data from set 2.4
lm_set_2.4_WR <- lm(mg ~ 1 + isolate, set_2.4_WR)
op = par(mfrow=c(1,2))
plot(lm_set_2.4_WR, which = c(2,3))
par(op)

2.4.3. - Anova

# assess variance
anova(lm_set_2.4_WR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value  Pr(>F)  
isolate   35  32418  926.22  1.7315 0.02512 *
Residuals 72  38516  534.94                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

2.4.3. - LSMeans - Dunnett

lsm_s2.4.dun.WR <- summary(lsmeans(lm_set_2.4_WR, trt.vs.ctrl ~isolate, ref=36)$contrasts, infer = c(T,T))
write.csv(lsm_s2.4.dun.WR, "./lsmeans_summary_tables/lsm_s2.4.dun.WR.csv")

2.4.3. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_2.4_WR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200470    23.2 13.4 72   -3.419     49.8  1    
 201151    23.9 13.4 72   -2.686     50.6  1    
 200598    25.6 13.4 72   -1.053     52.2  1    
 201833    26.9 13.4 72    0.281     53.5  1    
 201097    27.0 13.4 72    0.347     53.6  1    
 200882    28.4 16.4 72   -4.152     61.1  1    
 200570    29.0 13.4 72    2.347     55.6  1    
 201019    30.5 13.4 72    3.914     57.2  1    
 201853    31.3 13.4 72    4.714     58.0  1    
 200722    34.0 13.4 72    7.381     60.6  1    
 200565    36.8 13.4 72   10.147     63.4  1    
 201263    37.2 13.4 72   10.581     63.8  1    
 201850    37.2 13.4 72   10.614     63.9  1    
 200552    37.5 13.4 72   10.881     64.1  1    
 control   41.4 11.6 72   18.297     64.4  1    
 200920    43.0 13.4 72   16.347     69.6  1    
 201865    43.3 13.4 72   16.647     69.9  1    
 201832    43.4 13.4 72   16.781     70.0  1    
 201827    43.8 13.4 72   17.181     70.4  1    
 200705    44.3 13.4 72   17.647     70.9  1    
 200991    45.3 13.4 72   18.681     71.9  1    
 201184    45.5 13.4 72   18.914     72.2  1    
 201290    45.9 13.4 72   19.314     72.6  1    
 201150    48.2 13.4 72   21.614     74.9  1    
 200718    48.4 13.4 72   21.747     75.0  1    
 201872    48.7 13.4 72   22.114     75.4  1    
 200642    51.8 13.4 72   25.214     78.5  12   
 200620    52.6 13.4 72   25.981     79.2  12   
 201814    53.6 13.4 72   27.014     80.3  12   
 200828    59.5 13.4 72   32.847     86.1  12   
 201939    59.9 13.4 72   33.281     86.5  12   
 200847    60.0 13.4 72   33.414     86.7  12   
 201819    60.3 13.4 72   33.647     86.9  12   
 200904    61.7 13.4 72   35.081     88.3  12   
 200487    66.3 13.4 72   39.681     92.9  12   
 201900   121.1 13.4 72   94.447    147.7   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 36 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_2.4_WR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

2.4.3. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_2.4_WR, trt.vs.ctrl~isolate,ref=36)$contrasts, alpha=0.1), main="Mean Wet Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

BCW201900 wet root mean and associated CI do not overlap with those of the control, and the mean is three times that of the control.

2.4.4. Wet Shoot Weight

# linear model of Wet Shoot data from set 2.4
lm_set_2.4_WS <- lm(mg ~ 1 + isolate, set_2.4_WS)
op = par(mfrow=c(1,2))
plot(lm_set_2.4_WS, which = c(2,3))
par(op)

2.4.4. - Anova

# assess variance
anova(lm_set_2.4_WS)
Analysis of Variance Table

Response: mg
          Df  Sum Sq Mean Sq F value    Pr(>F)    
isolate   35 1086235 31035.3  3.5606 2.604e-06 ***
Residuals 72  627582  8716.4                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

2.4.4. - LSMeans - Dunnett

lsm_s2.4.dun.WS <- summary(lsmeans(lm_set_2.4_WS, trt.vs.ctrl ~isolate, ref=36)$contrasts, infer = c(T,T))
write.csv(lsm_s2.4.dun.WS, "./lsmeans_summary_tables/lsm_s2.4.dun.WS.csv")

2.4.4. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_2.4_WS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200565     134 53.9 72     26.2      241  1    
 200598     153 53.9 72     45.1      260  1    
 200882     157 66.0 72     25.0      288  1    
 201833     157 53.9 72     49.5      264  1    
 200722     161 53.9 72     54.0      269  1    
 201151     171 53.9 72     63.5      278  1    
 200470     182 53.9 72     74.7      290  1    
 201097     190 53.9 72     82.3      297  1    
 200642     200 53.9 72     92.7      308  1    
 201850     206 53.9 72     98.3      313  1    
 201290     206 53.9 72     98.6      314  1    
 200570     208 53.9 72    101.0      316  1    
 200552     213 53.9 72    105.8      321  1    
 200991     218 53.9 72    111.0      326  12   
 201939     220 53.9 72    112.2      327  12   
 201853     221 53.9 72    113.5      328  12   
 200705     221 53.9 72    113.6      329  12   
 200828     231 53.9 72    123.7      339  12   
 201819     233 53.9 72    125.9      341  12   
 201184     241 53.9 72    133.1      348  12   
 201832     241 53.9 72    133.1      348  12   
 control    255 46.7 72    161.9      348  12   
 200904     257 53.9 72    149.9      365  12   
 201263     267 53.9 72    159.2      374  12   
 201872     267 53.9 72    159.6      375  12   
 200620     277 53.9 72    169.7      385  12   
 200920     282 53.9 72    175.0      390  12   
 201827     300 53.9 72    192.3      407  12   
 200718     308 53.9 72    200.1      415  12   
 201019     309 53.9 72    201.6      416  12   
 200487     315 53.9 72    207.9      423  12   
 200847     320 53.9 72    212.5      427  12   
 201865     391 53.9 72    283.9      499  123  
 201150     406 53.9 72    298.6      514  123  
 201814     503 53.9 72    395.8      611   23  
 201900     652 53.9 72    544.5      759    3  

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 36 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_2.4_WS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

2.4.4. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_2.4_WS, trt.vs.ctrl~isolate,ref=36)$contrasts, alpha=0.1), main="Mean Wet Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

BCW201900 and BCW201814 are the only isolates that have mean wet shoot weight estimates with confidence intervals that do not overlap with those of the control.

Batch 3.1

# analyze set 3.1 data
str(set_3.1)
'data.frame':   672 obs. of  4 variables:
 $ isolate: chr  "201315" "201315" "201315" "201315" ...
 $ rep    : int  1 1 1 1 1 1 2 2 2 2 ...
 $ sample : chr  "WS" "WR" "DS" "DR" ...
 $ mg     : num  610.6 109.8 30.2 8.3 58879.5 ...
#subset by sample type
set_3.1_DR <- filter(set_3.1, sample == "DR")
set_3.1_DS <- filter(set_3.1, sample == "DS")
set_3.1_WR <- filter(set_3.1, sample == "WR")
set_3.1_WS <- filter(set_3.1, sample == "WS")

Experimental Design Table

Structure Factor Type # levels
Treatment Isolate Qualitative 38
Design MS Media Slants Experimental Unit 114
Response Plant Tissue Weight Observational Unit 456
Response Dry Root Weight (DR) Variable 114
Response Dry Shoot Weight (DS) Variable 114
Response Wet Root Weight (WR) Variable 114
Response Wet Shoot Weight (WS) Variable 114

3.1.1. Dry Root Weight

# linear model of dry root data
lm_set_3.1_DR <- lm(mg ~ 1 + isolate, set_3.1_DR)
op = par(mfrow=c(1,2))
plot(lm_set_3.1_DR, which = c(2,3))
not plotting observations with leverage one:
  66
par(op)

3.1.1. - Anova

# assess variance
anova(lm_set_3.1_DR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   36 125.97  3.4993  1.3324 0.1516
Residuals 70 183.84  2.6263               

3.1.1. - LSMeans - Dunnett

lsm_s3.1.dun.DR <- summary(lsmeans(lm_set_3.1_DR, trt.vs.ctrl ~isolate, ref=37)$contrasts, infer = c(T,T))
write.csv(lsm_s3.1.dun.DR, "./lsmeans_summary_tables/lsm_s3.1.dun.DR.csv")

3.1.1. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.1_DR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean    SE df lower.CL upper.CL .group
 200290   0.633 0.936 70  -1.2327     2.50  1    
 201902   1.033 0.936 70  -0.8327     2.90  1    
 200806   1.067 0.936 70  -0.7994     2.93  1    
 201982   1.467 0.936 70  -0.3994     3.33  1    
 201938   1.633 0.936 70  -0.2327     3.50  12   
 200952   1.667 0.936 70  -0.1994     3.53  12   
 200588   1.700 1.621 70  -1.5321     4.93  12   
 200525   1.733 0.936 70  -0.1327     3.60  12   
 200667   1.767 0.936 70  -0.0994     3.63  12   
 200881   1.800 0.936 70  -0.0661     3.67  12   
 201897   1.833 0.936 70  -0.0327     3.70  12   
 200719   1.900 0.936 70   0.0339     3.77  12   
 201014   1.933 0.936 70   0.0673     3.80  12   
 200988   1.967 0.936 70   0.1006     3.83  12   
 200462   2.133 0.936 70   0.2673     4.00  12   
 201304   2.167 0.936 70   0.3006     4.03  12   
 200312   2.300 0.936 70   0.4339     4.17  12   
 200880   2.300 0.936 70   0.4339     4.17  12   
 200716   2.300 0.936 70   0.4339     4.17  12   
 200704   2.500 0.936 70   0.6339     4.37  12   
 200578   2.567 0.936 70   0.7006     4.43  12   
 control  2.600 0.936 70   0.7339     4.47  12   
 201854   2.600 0.936 70   0.7339     4.47  12   
 200477   2.600 0.936 70   0.7339     4.47  12   
 201078   2.633 0.936 70   0.7673     4.50  12   
 201861   2.733 0.936 70   0.8673     4.60  12   
 201154   2.733 0.936 70   0.8673     4.60  12   
 200983   2.833 0.936 70   0.9673     4.70  12   
 201267   2.867 0.936 70   1.0006     4.73  12   
 200555   2.867 0.936 70   1.0006     4.73  12   
 201844   2.933 0.936 70   1.0673     4.80  12   
 200438   2.950 1.146 70   0.6645     5.24  12   
 200797   3.467 0.936 70   1.6006     5.33  12   
 201914   3.733 0.936 70   1.8673     5.60  12   
 201315   4.200 0.936 70   2.3339     6.07  12   
 200976   5.500 1.146 70   3.2145     7.79  12   
 201088   6.500 0.936 70   4.6339     8.37   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 37 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.1_DR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.1.1. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.1_DR, trt.vs.ctrl~isolate,ref=37)$contrasts, alpha=0.1), main="Mean Dry Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

BCW201088 has a mean dry root weight estimate with confidence intervals that do not overlap with the control, but the lower CL of 201088 is very close to the upper CL of the control estimate.

3.1.2. Dry Shoot Weight

# linear model of dry shoot data
lm_set_3.1_DS <- lm(mg ~ 1 + isolate, set_3.1_DS)
op = par(mfrow=c(1,2))
plot(lm_set_3.1_DS, which = c(2,3))
not plotting observations with leverage one:
  66
par(op)

3.1.2. - Anova

# assess variance
anova(lm_set_3.1_DS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value   Pr(>F)   
isolate   36 3100.4  86.123  1.9583 0.008178 **
Residuals 70 3078.4  43.978                    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

3.1.2. - LSMeans - Dunnett

lsm_s3.1.dun.DS <- summary(lsmeans(lm_set_3.1_DS, trt.vs.ctrl ~isolate, ref=37)$contrasts, infer = c(T,T))
write.csv(lsm_s3.1.dun.DS, "./lsmeans_summary_tables/lsm_s3.1.dun.DS.csv")

3.1.2. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.1_DS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200806    4.97 3.83 70   -2.670     12.6  1    
 200312    6.90 3.83 70   -0.736     14.5  1    
 201154    7.90 3.83 70    0.264     15.5  1    
 200880    8.43 3.83 70    0.797     16.1  1    
 201982    9.50 3.83 70    1.864     17.1  1    
 200704   10.30 3.83 70    2.664     17.9  1    
 200290   10.47 3.83 70    2.830     18.1  1    
 201938   10.53 3.83 70    2.897     18.2  1    
 200881   11.03 3.83 70    3.397     18.7  1    
 control  11.43 3.83 70    3.797     19.1  12   
 201902   11.53 3.83 70    3.897     19.2  12   
 200952   11.57 3.83 70    3.930     19.2  12   
 200462   11.63 3.83 70    3.997     19.3  12   
 200477   11.73 3.83 70    4.097     19.4  12   
 201014   11.93 3.83 70    4.297     19.6  12   
 200719   12.33 3.83 70    4.697     20.0  12   
 201304   12.97 3.83 70    5.330     20.6  12   
 200578   13.03 3.83 70    5.397     20.7  12   
 200983   13.50 3.83 70    5.864     21.1  12   
 201078   13.60 3.83 70    5.964     21.2  12   
 200797   14.50 3.83 70    6.864     22.1  12   
 201861   14.90 3.83 70    7.264     22.5  12   
 200438   14.90 4.69 70    5.548     24.3  12   
 201267   15.23 3.83 70    7.597     22.9  12   
 201897   15.53 3.83 70    7.897     23.2  12   
 201844   15.93 3.83 70    8.297     23.6  12   
 200588   16.20 6.63 70    2.974     29.4  12   
 200716   17.87 3.83 70   10.230     25.5  12   
 200667   19.37 3.83 70   11.730     27.0  12   
 201854   19.60 3.83 70   11.964     27.2  12   
 200988   20.80 3.83 70   13.164     28.4  12   
 201315   20.83 3.83 70   13.197     28.5  12   
 201088   20.93 3.83 70   13.297     28.6  12   
 200555   21.07 3.83 70   13.430     28.7  12   
 200525   21.17 3.83 70   13.530     28.8  12   
 200976   26.00 4.69 70   16.648     35.4  12   
 201914   31.67 3.83 70   24.030     39.3   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 37 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.1_DS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.1.2. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.1_DS, trt.vs.ctrl~isolate,ref=37)$contrasts, alpha=0.1), main="Mean Dry Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

BCW201914 has a mean dry shoot weight that is nearly three times that of the control and the confidence intervals between the two do not overlap at an alpha level of 0.1.

3.1.3. Wet Root Weight

# linear model of wet root data
lm_set_3.1_WR <- lm(mg ~ 1 + isolate, set_3.1_WR)
op = par(mfrow=c(1,2))
plot(lm_set_3.1_WR, which = c(2,3))
not plotting observations with leverage one:
  66
par(op)

3.1.3. - Anova

# assess variance
anova(lm_set_3.1_WR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)  
isolate   36  30271  840.87  1.7211 0.0263 *
Residuals 70  34200  488.57                 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

3.1.3. - LSMeans - Dunnett

summary(lsmeans(lm_set_3.1_WR, trt.vs.ctrl ~isolate, ref=37)$contrasts, infer = c(T,T))
 contrast         estimate   SE df lower.CL upper.CL t.ratio p.value
 200290 - control   -35.13 18.0 70    -93.0     22.7 -1.947  0.5926 
 200312 - control   -17.87 18.0 70    -75.7     40.0 -0.990  0.9860 
 200438 - control   -15.27 20.2 70    -79.9     49.4 -0.757  0.9977 
 200462 - control   -12.40 18.0 70    -70.2     45.4 -0.687  0.9988 
 200477 - control   -14.53 18.0 70    -72.4     43.3 -0.805  0.9965 
 200525 - control   -26.07 18.0 70    -83.9     31.8 -1.444  0.8797 
 200555 - control   -13.27 18.0 70    -71.1     44.6 -0.735  0.9981 
 200578 - control    -9.10 18.0 70    -66.9     48.7 -0.504  0.9999 
 200588 - control   -13.87 25.5 70    -95.7     67.9 -0.543  0.9998 
 200667 - control   -14.20 18.0 70    -72.0     43.6 -0.787  0.9970 
 200704 - control   -20.17 18.0 70    -78.0     37.7 -1.117  0.9705 
 200716 - control   -25.53 18.0 70    -83.4     32.3 -1.415  0.8914 
 200719 - control   -22.13 18.0 70    -80.0     35.7 -1.226  0.9493 
 200797 - control     1.30 18.0 70    -56.5     59.1  0.072  1.0000 
 200806 - control   -40.30 18.0 70    -98.1     17.5 -2.233  0.4037 
 200880 - control    -9.90 18.0 70    -67.7     47.9 -0.549  0.9998 
 200881 - control   -23.03 18.0 70    -80.9     34.8 -1.276  0.9367 
 200952 - control   -28.07 18.0 70    -85.9     29.8 -1.555  0.8297 
 200976 - control    52.28 20.2 70    -12.4    117.0  2.591  0.2129 
 200983 - control    -2.13 18.0 70    -60.0     55.7 -0.118  1.0000 
 200988 - control   -31.17 18.0 70    -89.0     26.7 -1.727  0.7347 
 201014 - control   -21.37 18.0 70    -79.2     36.5 -1.184  0.9585 
 201078 - control   -17.10 18.0 70    -74.9     40.7 -0.947  0.9895 
 201088 - control    27.33 18.0 70    -30.5     85.2  1.515  0.8491 
 201154 - control   -10.63 18.0 70    -68.5     47.2 -0.589  0.9996 
 201267 - control   -21.03 18.0 70    -78.9     36.8 -1.165  0.9621 
 201304 - control   -26.33 18.0 70    -84.2     31.5 -1.459  0.8736 
 201315 - control    16.37 18.0 70    -41.5     74.2  0.907  0.9921 
 201844 - control    -4.67 18.0 70    -62.5     53.2 -0.259  1.0000 
 201854 - control    -5.07 18.0 70    -62.9     52.8 -0.281  1.0000 
 201861 - control     8.00 18.0 70    -49.8     65.8  0.443  1.0000 
 201897 - control   -14.60 18.0 70    -72.4     43.2 -0.809  0.9964 
 201902 - control   -35.00 18.0 70    -92.8     22.8 -1.939  0.5976 
 201914 - control    -4.10 18.0 70    -61.9     53.7 -0.227  1.0000 
 201938 - control   -28.93 18.0 70    -86.8     28.9 -1.603  0.8051 
 201982 - control   -24.93 18.0 70    -82.8     32.9 -1.382  0.9037 

Confidence level used: 0.95 
Conf-level adjustment: dunnettx method for 36 estimates 
P value adjustment: dunnettx method for 36 tests 

3.1.3. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.1_WR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200806    15.3 12.8 70   -10.19     40.7  1    
 200290    20.4 12.8 70    -5.02     45.9  1    
 201902    20.6 12.8 70    -4.89     46.0  1    
 200988    24.4 12.8 70    -1.05     49.9  1    
 201938    26.6 12.8 70     1.18     52.1  1    
 200952    27.5 12.8 70     2.05     53.0  1    
 201304    29.2 12.8 70     3.78     54.7  1    
 200525    29.5 12.8 70     4.05     55.0  1    
 200716    30.0 12.8 70     4.58     55.5  1    
 201982    30.6 12.8 70     5.18     56.1  1    
 200881    32.5 12.8 70     7.08     58.0  12   
 200719    33.4 12.8 70     7.98     58.9  12   
 201014    34.2 12.8 70     8.75     59.7  12   
 201267    34.5 12.8 70     9.08     60.0  12   
 200704    35.4 12.8 70     9.95     60.9  12   
 200312    37.7 12.8 70    12.25     63.2  12   
 201078    38.5 12.8 70    13.01     63.9  12   
 200438    40.3 15.6 70     9.13     71.5  12   
 201897    41.0 12.8 70    15.51     66.4  12   
 200477    41.0 12.8 70    15.58     66.5  12   
 200667    41.4 12.8 70    15.91     66.8  12   
 200588    41.7 22.1 70    -2.38     85.8  12   
 200555    42.3 12.8 70    16.85     67.8  12   
 200462    43.2 12.8 70    17.71     68.6  12   
 201154    44.9 12.8 70    19.48     70.4  12   
 200880    45.7 12.8 70    20.21     71.1  12   
 200578    46.5 12.8 70    21.01     71.9  12   
 201854    50.5 12.8 70    25.05     76.0  12   
 201844    50.9 12.8 70    25.45     76.4  12   
 201914    51.5 12.8 70    26.01     76.9  12   
 200983    53.4 12.8 70    27.98     78.9  12   
 control   55.6 12.8 70    30.11     81.0  12   
 200797    56.9 12.8 70    31.41     82.3  12   
 201861    63.6 12.8 70    38.11     89.0  12   
 201315    71.9 12.8 70    46.48     97.4  12   
 201088    82.9 12.8 70    57.45    108.4  12   
 200976   107.8 15.6 70    76.68    139.0   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 37 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.1_WR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.1.3. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.1_WR, trt.vs.ctrl~isolate,ref=37)$contrasts, alpha=0.1), main="Mean Wet Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

The results for the wet root data agree with those of the dry root data.

3.1.4. Wet Shoot Weight

# linear model of wet shoot data
lm_set_3.1_WS <- lm(mg ~ 1 + isolate, set_3.1_WS)
op = par(mfrow=c(1,2))
plot(lm_set_3.1_WS, which = c(2,3))
not plotting observations with leverage one:
  66
par(op)

3.1.4. - Anova

# assess variance
anova(lm_set_3.1_WS)
Analysis of Variance Table

Response: mg
          Df  Sum Sq Mean Sq F value  Pr(>F)  
isolate   36  897234   24923  1.6178 0.04297 *
Residuals 70 1078397   15406                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

3.1.4. - LSMeans - Dunnett

lsm_s3.1.dun.WS <- summary(lsmeans(lm_set_3.1_WS, trt.vs.ctrl ~isolate, ref=37)$contrasts, infer = c(T,T))
write.csv(lsm_s3.1.dun.WS, "./lsmeans_summary_tables/lsm_s3.1.dun.WS.csv")

3.1.4. - CLD

CLD(lsmeans(lm_set_3.1_WS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean    SE df lower.CL upper.CL .group
 200806    91.9  71.7 70    -51.0      235  1    
 200312   117.4  71.7 70    -25.5      260  12   
 201154   165.4  71.7 70     22.4      308  123  
 200880   165.9  71.7 70     23.0      309  123  
 201982   171.6  71.7 70     28.7      315  123  
 200881   180.3  71.7 70     37.4      323  123  
 201938   181.6  71.7 70     38.7      325  123  
 200704   185.2  71.7 70     42.3      328  123  
 200952   190.5  71.7 70     47.5      333  123  
 201304   197.4  71.7 70     54.5      340  123  
 200290   198.4  71.7 70     55.5      341  123  
 200462   200.0  71.7 70     57.0      343  123  
 201078   204.4  71.7 70     61.5      347  123  
 201902   213.3  71.7 70     70.4      356  123  
 control  224.2  71.7 70     81.3      367  123  
 200438   224.3  87.8 70     49.3      399  123  
 201014   235.0  71.7 70     92.1      378  123  
 200719   241.3  71.7 70     98.4      384  123  
 200983   248.3  71.7 70    105.4      391  123  
 200477   250.8  71.7 70    107.9      394  123  
 201267   256.8  71.7 70    113.8      400  123  
 200797   264.5  71.7 70    121.6      407  123  
 200578   268.8  71.7 70    125.9      412  123  
 200716   295.1  71.7 70    152.1      438  123  
 200988   304.4  71.7 70    161.4      447  123  
 200667   313.0  71.7 70    170.1      456  123  
 201844   318.4  71.7 70    175.4      461  123  
 201861   325.8  71.7 70    182.9      469  123  
 201854   331.4  71.7 70    188.5      474  123  
 200555   342.6  71.7 70    199.6      485  123  
 200588   342.6 124.1 70     95.1      590  123  
 201897   344.6  71.7 70    201.7      488  123  
 200525   349.9  71.7 70    207.0      493  123  
 201088   386.6  71.7 70    243.7      530  123  
 201315   397.7  71.7 70    254.8      541  123  
 201914   499.9  71.7 70    356.9      643    3  
 200976   523.4  87.8 70    348.3      698   23  

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 37 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.1_WS, ~isolate), alpha=0.1), main="Set 3.1: All pairwise comparisons for Mean Wet Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

Confidence intervals overlap between isolates with largest mean differences to the control.

Batch 3.2

# analyze set 3.2 data
str(set_3.2)
'data.frame':   456 obs. of  4 variables:
 $ isolate: chr  "200886" "200886" "200886" "200886" ...
 $ rep    : int  1 1 1 1 1 1 2 2 2 2 ...
 $ sample : chr  "WS" "WR" "DS" "DR" ...
 $ mg     : num  384.8 58.7 21.8 5.5 58371.4 ...
#subset by sample type
set_3.2_DR <- filter(set_3.2, sample == "DR")
set_3.2_DS <- filter(set_3.2, sample == "DS")
set_3.2_WR <- filter(set_3.2, sample == "WR")
set_3.2_WS <- filter(set_3.2, sample == "WS")

Experimental Design Table

Structure Factor Type # levels
Treatment Isolate Qualitative 26
Design MS Media Slants Experimental Unit 78
Response Plant Tissue Weight Observational Unit 312
Response Dry Root Weight (DR) Variable 78
Response Dry Shoot Weight (DS) Variable 78
Response Wet Root Weight (WR) Variable 78
Response Wet Shoot Weight (WS) Variable 78

3.2.1. Dry Root Weight

# linear model of dry root data
lm_set_3.2_DR <- lm(mg ~ 1 + isolate, set_3.2_DR)
op = par(mfrow=c(1,2))
plot(lm_set_3.2_DR, which = c(2,3))
not plotting observations with leverage one:
  52
par(op)

3.2.1. - Anova

# assess variance
anova(lm_set_3.2_DR)
Analysis of Variance Table

Response: mg
          Df  Sum Sq Mean Sq F value Pr(>F)
isolate   24  62.616  2.6090  1.1384 0.3424
Residuals 48 110.007  2.2918               

3.2.1. - LSMeans - Dunnett

lsm_s3.2.dun.DR <- summary(lsmeans(lm_set_3.2_DR, trt.vs.ctrl ~isolate, ref=25)$contrasts, infer = c(T,T))
write.csv(lsm_s3.2.dun.DR, "./lsmeans_summary_tables/lsm_s3.2.dun.DR.csv")

3.2.1. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.2_DR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean    SE df lower.CL upper.CL .group
 200903    1.23 0.874 48   -0.524     2.99  1    
 201949    1.23 0.874 48   -0.524     2.99  1    
 200436    1.37 0.874 48   -0.391     3.12  1    
 200650    1.40 0.874 48   -0.357     3.16  1    
 201020    1.50 1.514 48   -1.544     4.54  1    
 200989    1.50 0.874 48   -0.257     3.26  1    
 200887    2.00 0.874 48    0.243     3.76  1    
 201059    2.17 0.874 48    0.409     3.92  1    
 200544    2.30 0.874 48    0.543     4.06  1    
 201013    2.30 0.874 48    0.543     4.06  1    
 200647    2.33 0.874 48    0.576     4.09  1    
 201010    2.40 0.874 48    0.643     4.16  1    
 201444    2.63 0.874 48    0.876     4.39  1    
 201257    2.67 0.874 48    0.909     4.42  1    
 200879    2.83 0.874 48    1.076     4.59  1    
 201036    2.87 0.874 48    1.109     4.62  1    
 201445    3.13 0.874 48    1.376     4.89  1    
 200886    3.23 0.874 48    1.476     4.99  1    
 201615    3.27 0.874 48    1.509     5.02  1    
 200649    3.40 0.874 48    1.643     5.16  1    
 200499    3.50 0.874 48    1.743     5.26  1    
 control   3.67 0.874 48    1.909     5.42  1    
 200820    3.80 0.874 48    2.043     5.56  1    
 200776    4.30 0.874 48    2.543     6.06  1    
 200801    4.50 0.874 48    2.743     6.26  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 25 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.2_DR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.2.1. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.2_DR, trt.vs.ctrl~isolate,ref=25)$contrasts, alpha=0.1), main="Mean Dry Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

There are no significantly different means estimates

3.2.2. Dry Shoot Weight

# linear model of dry shoot data
lm_set_3.2_DS <- lm(mg ~ 1 + isolate, set_3.2_DS)
op = par(mfrow=c(1,2))
plot(lm_set_3.2_DS, which = c(2,3))
not plotting observations with leverage one:
  52
par(op)

3.2.2. - Anova

# assess variance
anova(lm_set_3.2_DS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   24  909.2  37.883  0.8117 0.7051
Residuals 48 2240.2  46.671               

3.2.2. - LSMeans - Dunnett

lsm_s3.2.dun.DS <- summary(lsmeans(lm_set_3.2_DS, trt.vs.ctrl ~isolate, ref=25)$contrasts, infer = c(T,T))
write.csv(lsm_s3.2.dun.DS, "./lsmeans_summary_tables/lsm_s3.2.dun.DS.csv")

3.2.2. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.2_DS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 201036    6.27 3.94 48   -1.664     14.2  1    
 200903    7.17 3.94 48   -0.764     15.1  1    
 200647    7.30 3.94 48   -0.630     15.2  1    
 201257    8.87 3.94 48    0.936     16.8  1    
 200436    9.77 3.94 48    1.836     17.7  1    
 201615   10.37 3.94 48    2.436     18.3  1    
 200820   10.50 3.94 48    2.570     18.4  1    
 200801   10.73 3.94 48    2.803     18.7  1    
 201013   11.07 3.94 48    3.136     19.0  1    
 200887   11.53 3.94 48    3.603     19.5  1    
 200499   12.20 3.94 48    4.270     20.1  1    
 201059   12.40 3.94 48    4.470     20.3  1    
 200886   12.47 3.94 48    4.536     20.4  1    
 200650   12.60 3.94 48    4.670     20.5  1    
 201949   12.60 3.94 48    4.670     20.5  1    
 201445   12.97 3.94 48    5.036     20.9  1    
 200989   13.03 3.94 48    5.103     21.0  1    
 201444   15.10 3.94 48    7.170     23.0  1    
 200544   15.23 3.94 48    7.303     23.2  1    
 201020   15.50 6.83 48    1.764     29.2  1    
 200649   16.17 3.94 48    8.236     24.1  1    
 201010   16.27 3.94 48    8.336     24.2  1    
 200879   17.63 3.94 48    9.703     25.6  1    
 control  18.73 3.94 48   10.803     26.7  1    
 200776   20.43 3.94 48   12.503     28.4  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 25 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.2_DS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.2.2. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.2_DS, trt.vs.ctrl~isolate,ref=25)$contrasts, alpha=0.1), main="Mean Dry Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

There are no significantly different means estimates for Dry Shoot weight in Batch 3.2.

3.2.3. Wet Root Data

# linear model of wet root data
lm_set_3.2_WR <- lm(mg ~ 1 + isolate, set_3.2_WR)
op = par(mfrow=c(1,2))
plot(lm_set_3.2_WR, which = c(2,3))
not plotting observations with leverage one:
  52
par(op)

3.2.3. - Anova

# assess variance
anova(lm_set_3.2_WR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   24  12877  536.56  1.3548 0.1827
Residuals 48  19011  396.06               

3.2.3. - LSMeans - Dunnett

lsm_s3.2.dun.WR <- summary(lsmeans(lm_set_3.2_WR, trt.vs.ctrl ~isolate, ref=25)$contrasts, infer = c(T,T))
write.csv(lsm_s3.2.dun.WR, "./lsmeans_summary_tables/lsm_s3.2.dun.WR.csv")

3.2.3. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.2_WR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200903    16.1 11.5 48    -6.97     39.2  1    
 200436    17.5 11.5 48    -5.57     40.6  1    
 200650    18.5 11.5 48    -4.60     41.6  1    
 200989    18.8 11.5 48    -4.30     41.9  1    
 201949    19.7 11.5 48    -3.40     42.8  1    
 201020    20.0 19.9 48   -20.01     60.0  1    
 200887    24.2 11.5 48     1.13     47.3  1    
 201059    25.2 11.5 48     2.10     48.3  1    
 200647    28.8 11.5 48     5.66     51.9  1    
 201036    29.3 11.5 48     6.23     52.4  1    
 201013    29.8 11.5 48     6.70     52.9  1    
 201010    31.4 11.5 48     8.26     54.5  1    
 200544    32.0 11.5 48     8.86     55.1  1    
 201444    35.1 11.5 48    12.03     58.2  1    
 201445    35.4 11.5 48    12.26     58.5  1    
 200879    35.6 11.5 48    12.50     58.7  1    
 200886    37.1 11.5 48    14.00     60.2  1    
 200820    40.8 11.5 48    17.70     63.9  1    
 201257    41.0 11.5 48    17.86     64.1  1    
 201615    41.3 11.5 48    18.23     64.4  1    
 200499    47.3 11.5 48    24.16     70.4  1    
 200649    48.6 11.5 48    25.46     71.7  1    
 200801    58.0 11.5 48    34.93     81.1  1    
 200776    59.0 11.5 48    35.93     82.1  1    
 control   65.0 11.5 48    41.93     88.1  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 25 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.2_WR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.2.3. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.2_WR, trt.vs.ctrl~isolate,ref=25)$contrasts, alpha=0.1), main="Mean Wet Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

There are no significantly different means estimates for wet root weight in batch 3.2.

3.2.4. Wet Shoot Data

# linear model of wet shoot data
lm_set_3.2_WS <- lm(mg ~ 1 + isolate, set_3.2_WS)
op = par(mfrow=c(1,2))
plot(lm_set_3.2_WS, which = c(2,3))
not plotting observations with leverage one:
  52
par(op)

3.2.4. - Anova

# assess variance
anova(lm_set_3.2_WS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   24 359228   14968  1.0287 0.4531
Residuals 47 683848   14550               

3.2.4. - LSMeans - Dunnett

lsm_s3.2.dun.WS <- summary(lsmeans(lm_set_3.2_WS, trt.vs.ctrl ~isolate, ref=25)$contrasts, infer = c(T,T))
write.csv(lsm_s3.2.dun.WS, "./lsmeans_summary_tables/lsm_s3.2.dun.WS.csv")

3.2.4. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.2_WS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean    SE df lower.CL upper.CL .group
 201036     100  69.6 47    -39.9      240  1    
 200903     106  69.6 47    -33.9      246  1    
 200647     121  69.6 47    -19.5      261  1    
 201615     153  69.6 47     12.9      293  1    
 200820     160  69.6 47     19.5      300  1    
 201257     168  69.6 47     28.0      308  1    
 200436     173  69.6 47     33.1      313  1    
 200887     179  69.6 47     39.3      320  1    
 200801     181  69.6 47     41.4      322  1    
 201020     192 120.6 47    -51.2      434  1    
 201059     192  69.6 47     52.3      333  1    
 200499     194  69.6 47     54.2      334  1    
 200989     205  69.6 47     64.9      345  1    
 201013     205  69.6 47     65.3      345  1    
 200544     206  69.6 47     65.7      346  1    
 200650     208  69.6 47     67.4      348  1    
 201949     213  69.6 47     72.7      353  1    
 200886     215  69.6 47     75.1      355  1    
 201445     252  69.6 47    111.9      392  1    
 201444     260  69.6 47    119.4      400  1    
 200879     289  69.6 47    149.0      429  1    
 201010     294  69.6 47    153.5      434  1    
 200649     327  85.3 47    155.8      499  1    
 200776     350  69.6 47    209.4      490  1    
 control    387  69.6 47    247.4      528  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 25 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.2_WS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.2.4. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.2_WS, trt.vs.ctrl~isolate,ref=25)$contrasts, alpha=0.1), main="Mean Wet Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

There are no significantly different means estimates. Control is the highest mean, all inoculated platlets exhibited lower mean wet shoot weight.

Batch 3.3

# analyze set 3.3 data
str(set_3.3)
'data.frame':   672 obs. of  4 variables:
 $ isolate: chr  "200798" "200798" "200798" "200798" ...
 $ rep    : int  1 1 1 1 1 1 2 2 2 2 ...
 $ sample : chr  "WS" "WR" "DS" "DR" ...
 $ mg     : num  68.3 11.6 5.8 0.4 57506.5 ...
#subset by sample type
set_3.3_DR <- filter(set_3.3, sample == "DR")
set_3.3_DS <- filter(set_3.3, sample == "DS")
set_3.3_WR <- filter(set_3.3, sample == "WR")
set_3.3_WS <- filter(set_3.3, sample == "WS")

Experimental Design Table

Structure Factor Type # levels
Treatment Isolate Qualitative 38
Design MS Media Slants Experimental Unit 114
Response Plant Tissue Weight Observational Unit 456
Response Dry Root Weight (DR) Variable 114
Response Dry Shoot Weight (DS) Variable 114
Response Wet Root Weight (WR) Variable 114
Response Wet Shoot Weight (WS) Variable 114

3.3.1. Dry Root Weight

# linear model of dry root data
lm_set_3.3_DR <- lm(mg ~ 1 + isolate, set_3.3_DR)
op = par(mfrow=c(1,2))
plot(lm_set_3.3_DR, which = c(2,3))
par(op)

3.3.1. - Anova

# assess variance
anova(lm_set_3.3_DR)
Analysis of Variance Table

Response: mg
          Df  Sum Sq Mean Sq F value    Pr(>F)    
isolate   36 117.722  3.2701  2.4963 0.0004876 ***
Residuals 72  94.318  1.3100                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

3.3.1. - LSMeans - Dunnett

lsm_s3.3.dun.DR <- summary(lsmeans(lm_set_3.3_DR, trt.vs.ctrl ~isolate, ref=37)$contrasts, infer = c(T,T))
write.csv(lsm_s3.3.dun.DR, "./lsmeans_summary_tables/lsm_s3.3.dun.DR.csv")

3.3.1. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.3_DR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean    SE df lower.CL upper.CL .group
 200815   0.733 0.661 72   -0.584     2.05  1    
 201937   1.233 0.661 72   -0.084     2.55  1    
 200574   1.233 0.661 72   -0.084     2.55  1    
 201721   1.500 0.661 72    0.183     2.82  1    
 201839   1.567 0.661 72    0.249     2.88  1    
 201828   1.567 0.661 72    0.249     2.88  1    
 201614   1.600 0.661 72    0.283     2.92  1    
 200798   1.633 0.661 72    0.316     2.95  1    
 202005   1.633 0.661 72    0.316     2.95  1    
 200909   1.633 0.661 72    0.316     2.95  1    
 201975   1.700 0.661 72    0.383     3.02  1    
 200521   1.767 0.661 72    0.449     3.08  1    
 201726   1.900 0.661 72    0.583     3.22  1    
 201811   1.933 0.661 72    0.616     3.25  1    
 201649   1.933 0.661 72    0.616     3.25  1    
 201021   2.133 0.661 72    0.816     3.45  1    
 200912   2.167 0.661 72    0.849     3.48  1    
 201081   2.400 0.661 72    1.083     3.72  1    
 200557   2.400 0.661 72    1.083     3.72  1    
 201071   2.533 0.661 72    1.216     3.85  1    
 200272   2.633 0.661 72    1.316     3.95  1    
 200281   2.650 0.809 72    1.037     4.26  1    
 200855   2.733 0.661 72    1.416     4.05  1    
 200442   2.733 0.661 72    1.416     4.05  1    
 201648   2.800 0.661 72    1.483     4.12  1    
 200641   2.800 0.661 72    1.483     4.12  1    
 200818   3.067 0.661 72    1.749     4.38  1    
 200656   3.100 0.661 72    1.783     4.42  1    
 200945   3.100 0.661 72    1.783     4.42  1    
 200497   3.200 0.809 72    1.587     4.81  12   
 200520   3.233 0.661 72    1.916     4.55  12   
 201450   3.233 0.661 72    1.916     4.55  12   
 201008   3.267 0.661 72    1.949     4.58  12   
 201441   3.433 0.661 72    2.116     4.75  12   
 200434   3.700 0.661 72    2.383     5.02  12   
 201903   3.800 0.661 72    2.483     5.12  12   
 control  6.667 0.661 72    5.349     7.98   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 37 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.3_DR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.3.1. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.3_DR, trt.vs.ctrl~isolate,ref=37)$contrasts, alpha=0.1), main="Mean Dry Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

Here, the control mean is much higher than most of the inoculated samples.

3.3.2. Dry Shoot Weight

# linear model of dry shoot data
lm_set_3.3_DS <- lm(mg ~ 1 + isolate, set_3.3_DS)
op = par(mfrow=c(1,2))
plot(lm_set_3.3_DS, which = c(2,3))
par(op)

3.3.2. - Anova

# assess variance
anova(lm_set_3.3_DS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   36 2315.0  64.304  1.3704  0.128
Residuals 72 3378.4  46.923               

3.3.2. - LSMeans - Dunnett

lsm_s3.3.dun.DS <- summary(lsmeans(lm_set_3.3_DS, trt.vs.ctrl ~isolate, ref=37)$contrasts, infer = c(T,T))
write.csv(lsm_s3.3.dun.DS, "./lsmeans_summary_tables/lsm_s3.3.dun.DS.csv")

3.3.2. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.3_DS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 201937    7.37 3.95 72  -0.5172     15.3  1    
 201726    7.87 3.95 72  -0.0172     15.8  1    
 200815    8.37 3.95 72   0.4828     16.3  1    
 200521    9.73 3.95 72   1.8495     17.6  1    
 201614   10.33 3.95 72   2.4495     18.2  1    
 200909   11.47 3.95 72   3.5828     19.4  1    
 201839   12.20 3.95 72   4.3161     20.1  1    
 201008   12.60 3.95 72   4.7161     20.5  12   
 200798   12.90 3.95 72   5.0161     20.8  12   
 201811   12.93 3.95 72   5.0495     20.8  12   
 200497   13.15 4.84 72   3.4943     22.8  12   
 201828   13.77 3.95 72   5.8828     21.7  12   
 200818   13.80 3.95 72   5.9161     21.7  12   
 201721   13.93 3.95 72   6.0495     21.8  12   
 200855   13.97 3.95 72   6.0828     21.9  12   
 200557   13.97 3.95 72   6.0828     21.9  12   
 202005   14.27 3.95 72   6.3828     22.2  12   
 201081   14.33 3.95 72   6.4495     22.2  12   
 201975   14.40 3.95 72   6.5161     22.3  12   
 201021   14.47 3.95 72   6.5828     22.4  12   
 201071   14.57 3.95 72   6.6828     22.5  12   
 200442   15.60 3.95 72   7.7161     23.5  12   
 201649   15.83 3.95 72   7.9495     23.7  12   
 200574   16.00 3.95 72   8.1161     23.9  12   
 200945   16.20 3.95 72   8.3161     24.1  12   
 200281   17.30 4.84 72   7.6443     27.0  12   
 201450   17.37 3.95 72   9.4828     25.3  12   
 200641   17.67 3.95 72   9.7828     25.6  12   
 200434   17.67 3.95 72   9.7828     25.6  12   
 201441   17.70 3.95 72   9.8161     25.6  12   
 201648   17.93 3.95 72  10.0495     25.8  12   
 200912   18.07 3.95 72  10.1828     26.0  12   
 200272   18.53 3.95 72  10.6495     26.4  12   
 200656   19.13 3.95 72  11.2495     27.0  12   
 200520   20.10 3.95 72  12.2161     28.0  12   
 201903   23.90 3.95 72  16.0161     31.8  12   
 control  33.40 3.95 72  25.5161     41.3   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 37 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.3_DS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.3.2. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.3_DS, trt.vs.ctrl~isolate,ref=37)$contrasts, alpha=0.1), main="Mean Dry Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

Again, we have negative differences in mean weight relative to the control.

3.3.3. Wet Root Weight

# linear model of wet root data
lm_set_3.3_WR <- lm(mg ~ 1 + isolate, set_3.3_WR)
op = par(mfrow=c(1,2))
plot(lm_set_3.3_WR, which = c(2,3))
par(op)

3.3.3. - Anova

# assess variance
anova(lm_set_3.3_WR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value  Pr(>F)    
isolate   36  41260 1146.11  3.5581 2.3e-06 ***
Residuals 72  23192  322.11                    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

3.3.3. - LSMeans - Dunnett

lsm_s3.3.dun.WR <- summary(lsmeans(lm_set_3.3_WR, trt.vs.ctrl ~isolate, ref=37)$contrasts, infer = c(T,T))
write.csv(lsm_s3.3.dun.WR, "./lsmeans_summary_tables/lsm_s3.3.dun.WR.csv")

3.3.3. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.3_WR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200815    9.07 10.4 72  -11.590     29.7  1    
 201937   14.80 10.4 72   -5.856     35.5  1    
 200574   17.30 10.4 72   -3.356     38.0  1    
 201828   19.60 10.4 72   -1.056     40.3  1    
 200909   20.83 10.4 72    0.177     41.5  1    
 201721   21.00 10.4 72    0.344     41.7  1    
 202005   21.33 10.4 72    0.677     42.0  1    
 201975   21.53 10.4 72    0.877     42.2  1    
 201021   21.60 10.4 72    0.944     42.3  1    
 201839   22.20 10.4 72    1.544     42.9  1    
 201614   22.43 10.4 72    1.777     43.1  1    
 200798   23.57 10.4 72    2.910     44.2  1    
 200521   23.93 10.4 72    3.277     44.6  1    
 201649   24.80 10.4 72    4.144     45.5  1    
 201811   26.20 10.4 72    5.544     46.9  1    
 200557   28.30 10.4 72    7.644     49.0  1    
 201081   29.00 10.4 72    8.344     49.7  1    
 200912   29.07 10.4 72    8.410     49.7  1    
 201726   32.23 10.4 72   11.577     52.9  1    
 201071   36.00 10.4 72   15.344     56.7  1    
 201648   36.13 10.4 72   15.477     56.8  1    
 200442   36.17 10.4 72   15.510     56.8  1    
 200945   36.67 10.4 72   16.010     57.3  1    
 201008   37.60 10.4 72   16.944     58.3  1    
 201450   37.83 10.4 72   17.177     58.5  1    
 200855   38.00 10.4 72   17.344     58.7  1    
 200272   38.03 10.4 72   17.377     58.7  1    
 200818   39.53 10.4 72   18.877     60.2  1    
 200641   41.97 10.4 72   21.310     62.6  1    
 201903   43.50 10.4 72   22.844     64.2  1    
 200520   44.20 10.4 72   23.544     64.9  1    
 200281   45.60 12.7 72   20.301     70.9  1    
 200497   47.50 12.7 72   22.201     72.8  1    
 201441   47.53 10.4 72   26.877     68.2  1    
 200656   51.53 10.4 72   30.877     72.2  1    
 200434   52.87 10.4 72   32.210     73.5  1    
 control 130.57 10.4 72  109.910    151.2   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 37 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.3_WR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.3.3. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.3_WR, trt.vs.ctrl~isolate,ref=37)$contrasts, alpha=0.1), main="Mean Wet Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

Effect of data distribution, or control is bad, or the isolates hinder growth?

3.3.4. Wet Shoot Weight

# linear model of wet shoot data
lm_set_3.3_WS <- lm(mg ~ 1 + isolate, set_3.3_WS)
op = par(mfrow=c(1,2))
plot(lm_set_3.3_WS, which = c(2,3))
par(op)

3.3.4. - Anova

# assess variance
anova(lm_set_3.3_WS)
Analysis of Variance Table

Response: mg
          Df  Sum Sq Mean Sq F value  Pr(>F)  
isolate   36  965186   26811  1.6313 0.03937 *
Residuals 72 1183354   16436                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

3.3.4. - LSMeans - Dunnett

lsm_s3.3.dun.WS <- summary(lsmeans(lm_set_3.3_WS, trt.vs.ctrl ~isolate, ref=37)$contrasts, infer = c(T,T))
write.csv(lsm_s3.3.dun.WS, "./lsmeans_summary_tables/lsm_s3.3.dun.WS.csv")

3.3.4. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.3_WS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 201937      95 74.0 72   -52.52      243  1    
 200815     111 74.0 72   -36.72      258  1    
 201726     144 74.0 72    -3.32      292  1    
 200798     146 74.0 72    -1.95      293  1    
 200521     160 74.0 72    12.05      307  1    
 201614     162 74.0 72    14.05      309  1    
 200909     169 74.0 72    21.58      317  1    
 201008     181 74.0 72    33.12      328  1    
 200557     190 74.0 72    41.98      337  1    
 201828     193 74.0 72    45.18      340  1    
 201811     198 74.0 72    50.62      346  1    
 201839     200 74.0 72    52.18      347  1    
 202005     205 74.0 72    57.55      353  1    
 201021     214 74.0 72    66.12      361  1    
 201721     214 74.0 72    66.22      361  1    
 201975     218 74.0 72    70.32      365  1    
 200855     219 74.0 72    71.38      366  1    
 201081     226 74.0 72    78.52      374  1    
 201071     228 74.0 72    80.68      376  1    
 200442     234 74.0 72    86.18      381  1    
 200818     234 74.0 72    86.22      381  1    
 201649     234 74.0 72    86.72      382  1    
 201450     237 74.0 72    89.22      384  1    
 200497     237 90.7 72    56.44      418  12   
 200574     262 74.0 72   114.25      409  12   
 200641     267 74.0 72   119.55      415  12   
 200945     273 74.0 72   125.55      421  12   
 200912     282 74.0 72   134.25      429  12   
 200656     296 74.0 72   148.08      443  12   
 200520     298 74.0 72   150.95      446  12   
 201441     306 74.0 72   158.18      453  12   
 200281     307 90.7 72   126.59      488  12   
 201648     319 74.0 72   171.68      467  12   
 200434     329 74.0 72   181.45      477  12   
 200272     338 74.0 72   190.92      486  12   
 201903     376 74.0 72   228.68      524  12   
 control    655 74.0 72   507.62      803   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 37 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.3_WS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.3.4. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.3_WS, trt.vs.ctrl~isolate,ref=37)$contrasts, alpha=0.1), main="Mean Wet Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

The control mean weight is much higher than inoculated plant mean weights for wet shoot.

Batch 3.4

# analyze set 3.4 data
str(set_3.4)
'data.frame':   672 obs. of  4 variables:
 $ isolate: chr  "200278" "200278" "200278" "200278" ...
 $ rep    : int  1 1 1 1 1 1 2 2 2 2 ...
 $ sample : chr  "WS" "WR" "DS" "DR" ...
 $ mg     : num  333.2 49 22.9 3.4 59602.5 ...
#subset by sample type
set_3.4_DR <- filter(set_3.4, sample == "DR")
set_3.4_DS <- filter(set_3.4, sample == "DS")
set_3.4_WR <- filter(set_3.4, sample == "WR")
set_3.4_WS <- filter(set_3.4, sample == "WS")

Experimental Design Table

Structure Factor Type # levels
Treatment Isolate Qualitative 38
Design MS Media Slants Experimental Unit 114
Response Plant Tissue Weight Observational Unit 456
Response Dry Root Weight (DR) Variable 114
Response Dry Shoot Weight (DS) Variable 114
Response Wet Root Weight (WR) Variable 114
Response Wet Shoot Weight (WS) Variable 114

3.4.1. Dry Root Weight

# linear model of dry root data
lm_set_3.4_DR <- lm(mg ~ 1 + isolate, set_3.4_DR)
op = par(mfrow=c(1,2))
plot(lm_set_3.4_DR, which = c(2,3))
par(op)

3.4.1. - Anova

# assess variance
anova(lm_set_3.4_DR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value   Pr(>F)   
isolate   35 88.451  2.5272  2.0434 0.005613 **
Residuals 70 86.572  1.2367                    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

3.4.1. - LSMeans - Dunnett

lsm_s3.4.dun.DR <- summary(lsmeans(lm_set_3.4_DR, trt.vs.ctrl ~isolate, ref=36)$contrasts, infer = c(T,T))
write.csv(lsm_s3.4.dun.DR, "./lsmeans_summary_tables/lsm_s3.4.dun.DR.csv")

3.4.1. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.4_DR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean    SE df lower.CL upper.CL .group
 200651    1.10 0.642 70   -0.181     2.38  1    
 201995    1.10 0.642 70   -0.181     2.38  1    
 201070    1.20 0.786 70   -0.368     2.77  1    
 201107    1.53 0.642 70    0.253     2.81  1    
 201007    1.53 0.642 70    0.253     2.81  1    
 200891    1.57 0.642 70    0.286     2.85  1    
 200308    1.67 0.642 70    0.386     2.95  1    
 201653    1.70 0.642 70    0.419     2.98  1    
 201054    1.73 0.642 70    0.453     3.01  1    
 200542    1.77 0.642 70    0.486     3.05  1    
 201620    1.80 0.642 70    0.519     3.08  1    
 201082    1.80 0.642 70    0.519     3.08  1    
 200892    1.90 0.642 70    0.619     3.18  1    
 200790    1.97 0.642 70    0.686     3.25  1    
 200276    2.23 0.642 70    0.953     3.51  12   
 201044    2.40 0.642 70    1.119     3.68  12   
 200509    2.40 0.642 70    1.119     3.68  12   
 201248    2.47 0.642 70    1.186     3.75  12   
 201842    2.50 0.642 70    1.219     3.78  12   
 200465    2.53 0.642 70    1.253     3.81  12   
 200559    2.53 0.642 70    1.253     3.81  12   
 200993    2.60 0.642 70    1.319     3.88  12   
 200271    2.63 0.642 70    1.353     3.91  12   
 200646    2.65 0.786 70    1.082     4.22  12   
 200278    2.70 0.642 70    1.419     3.98  12   
 200437    2.70 0.642 70    1.419     3.98  12   
 201028    2.77 0.642 70    1.486     4.05  12   
 201293    2.77 0.642 70    1.486     4.05  12   
 200785    2.80 0.642 70    1.519     4.08  12   
 201461    3.00 0.642 70    1.719     4.28  12   
 200317    3.10 0.642 70    1.819     4.38  12   
 200944    3.43 0.642 70    2.153     4.71  12   
 200464    3.57 0.642 70    2.286     4.85  12   
 control   4.07 0.642 70    2.786     5.35  12   
 200791    4.33 0.642 70    3.053     5.61  12   
 200432    5.47 0.642 70    4.186     6.75   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 36 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.4_DR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.4.1. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.4_DR, trt.vs.ctrl~isolate,ref=36)$contrasts, alpha=0.1), main="Mean Dry Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

There are not significant positive differences between mean estimates for inoculated plants and the control plants with respect to dry root weight measurements in batch 3.4.

3.4.2. Dry Shoot Weight

# linear model of dry shoot data
lm_set_3.4_DS <- lm(mg ~ 1 + isolate, set_3.4_DS)
op = par(mfrow=c(1,2))
plot(lm_set_3.4_DS, which = c(2,3))
par(op)

3.4.2. - Anova

# assess variance
anova(lm_set_3.4_DS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value  Pr(>F)  
isolate   35 2611.0  74.600  1.8568 0.01412 *
Residuals 70 2812.3  40.176                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

3.4.2. - LSMeans - Dunnett

lsm_s3.4.dun.DS <- summary(lsmeans(lm_set_3.4_DS, trt.vs.ctrl ~isolate, ref=36)$contrasts, infer = c(T,T))
write.csv(lsm_s3.4.dun.DS, "./lsmeans_summary_tables/lsm_s3.4.dun.DS.csv")

3.4.2. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.4_DS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 201070    5.70 4.48 70   -3.239     14.6  1    
 200542    7.60 3.66 70    0.301     14.9  1    
 201995    9.03 3.66 70    1.735     16.3  12   
 201007    9.33 3.66 70    2.035     16.6  12   
 200790   10.37 3.66 70    3.068     17.7  12   
 200651   10.47 3.66 70    3.168     17.8  12   
 201107   10.77 3.66 70    3.468     18.1  12   
 200892   12.10 3.66 70    4.801     19.4  12   
 200276   12.53 3.66 70    5.235     19.8  12   
 200891   12.57 3.66 70    5.268     19.9  12   
 201082   13.23 3.66 70    5.935     20.5  12   
 201653   13.67 3.66 70    6.368     21.0  12   
 200308   14.00 3.66 70    6.701     21.3  12   
 201028   15.07 3.66 70    7.768     22.4  12   
 201054   15.30 3.66 70    8.001     22.6  12   
 200465   15.37 3.66 70    8.068     22.7  12   
 200278   15.80 3.66 70    8.501     23.1  12   
 200317   16.20 3.66 70    8.901     23.5  12   
 201842   16.23 3.66 70    8.935     23.5  12   
 200271   16.30 3.66 70    9.001     23.6  12   
 201248   16.50 3.66 70    9.201     23.8  12   
 control  18.30 3.66 70   11.001     25.6  12   
 201293   18.57 3.66 70   11.268     25.9  12   
 200646   18.60 4.48 70    9.661     27.5  12   
 200785   18.67 3.66 70   11.368     26.0  12   
 201044   18.67 3.66 70   11.368     26.0  12   
 200559   18.80 3.66 70   11.501     26.1  12   
 201461   20.23 3.66 70   12.935     27.5  12   
 200993   21.20 3.66 70   13.901     28.5  12   
 200437   21.27 3.66 70   13.968     28.6  12   
 201620   22.47 3.66 70   15.168     29.8  12   
 200944   22.47 3.66 70   15.168     29.8  12   
 200509   22.73 3.66 70   15.435     30.0  12   
 200464   22.77 3.66 70   15.468     30.1  12   
 200432   24.67 3.66 70   17.368     32.0  12   
 200791   27.43 3.66 70   20.135     34.7   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 36 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.4_DS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.4.2. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.4_DS, trt.vs.ctrl~isolate,ref=36)$contrasts, alpha=0.1), main="Mean Dry Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

All isolates have mean estimates for dry shoot mass with confidence intervals that overlap with those of the control group.

3.4.3. Wet Root Weight

# linear model of wet root data
lm_set_3.4_WR <- lm(mg ~ 1 + isolate, set_3.4_WR)
op = par(mfrow=c(1,2))
plot(lm_set_3.4_WR, which = c(2,3))
par(op)

3.4.3. - Anova

# assess variance
anova(lm_set_3.4_WR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value    Pr(>F)    
isolate   35  23914  683.26  3.6402 2.118e-06 ***
Residuals 70  13139  187.70                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

3.4.3. - LSMeans - Dunnett

lsm_s3.4.dun.WR <- summary(lsmeans(lm_set_3.4_WR, trt.vs.ctrl ~isolate, ref=36)$contrasts, infer = c(T,T))
write.csv(lsm_s3.4.dun.WR, "./lsmeans_summary_tables/lsm_s3.4.dun.WR.csv")

3.4.3. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.4_WR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 201070    16.4 9.69 70    -2.97     35.7  1    
 201007    16.8 7.91 70     1.02     32.6  1    
 201995    17.5 7.91 70     1.69     33.2  1    
 200651    17.9 7.91 70     2.12     33.7  1    
 200891    18.4 7.91 70     2.66     34.2  1    
 200308    19.9 7.91 70     4.12     35.7  1    
 201054    22.3 7.91 70     6.49     38.0  1    
 200542    22.3 7.91 70     6.52     38.1  1    
 200892    23.5 7.91 70     7.76     39.3  1    
 201620    23.7 7.91 70     7.92     39.5  1    
 201653    24.2 7.91 70     8.46     40.0  1    
 201107    24.5 7.91 70     8.69     40.2  1    
 201082    26.3 7.91 70    10.49     42.0  12   
 200790    27.0 7.91 70    11.22     42.8  12   
 201044    28.2 7.91 70    12.39     43.9  123  
 200276    29.0 7.91 70    13.22     44.8  123  
 200559    29.8 7.91 70    14.06     45.6  123  
 200993    30.2 7.91 70    14.42     46.0  123  
 200509    30.5 7.91 70    14.72     46.3  123  
 200271    31.7 7.91 70    15.92     47.5  123  
 201842    32.3 7.91 70    16.49     48.0  123  
 200437    32.3 7.91 70    16.56     48.1  123  
 201248    33.4 7.91 70    17.62     49.2  123  
 200465    33.6 7.91 70    17.82     49.4  123  
 201028    35.0 7.91 70    19.22     50.8  123  
 200646    36.1 9.69 70    16.83     55.5  1234 
 200278    37.5 7.91 70    21.72     53.3  1234 
 200785    37.9 7.91 70    22.16     53.7  1234 
 200317    40.8 7.91 70    25.06     56.6  1234 
 201461    41.2 7.91 70    25.46     57.0  1234 
 201293    42.8 7.91 70    26.99     58.5  1234 
 200944    54.6 7.91 70    38.86     70.4  1234 
 200464    58.7 7.91 70    42.89     74.4  1234 
 control   66.9 7.91 70    51.09     82.6   234 
 200791    69.2 7.91 70    53.39     84.9    34 
 200432    79.1 7.91 70    63.36     94.9     4 

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 36 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.4_WR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.4.3. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.4_WR, trt.vs.ctrl~isolate,ref=36)$contrasts, alpha=0.1), main="Mean Wet Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

No significant effect of inoculation treatment on mean wet root weight for batch 3.4 was observed.

3.4.4. Wet Shoot Weight

# linear model of wet shoot data
lm_set_3.4_WS <- lm(mg ~ 1 + isolate, set_3.4_WS)
op = par(mfrow=c(1,2))
plot(lm_set_3.4_WS, which = c(2,3))
par(op)

3.4.4. - Anova

# assess variance
anova(lm_set_3.4_WS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value   Pr(>F)   
isolate   35 942292   26923  1.9685 0.008146 **
Residuals 70 957350   13676                    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

3.4.4. - LSMeans - Dunnett

lsm_s3.4.dun.WS <- summary(lsmeans(lm_set_3.4_WS, trt.vs.ctrl ~isolate, ref=36)$contrasts, infer = c(T,T))
write.csv(lsm_s3.4.dun.WS, "./lsmeans_summary_tables/lsm_s3.4.dun.WS.csv")

3.4.4. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.4_WS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 201070     107 82.7 70   -57.68      272  1    
 200542     133 67.5 70    -1.96      267  1    
 201995     159 67.5 70    24.57      294  1    
 201007     160 67.5 70    24.87      294  1    
 200651     166 67.5 70    30.94      300  1    
 200790     168 67.5 70    33.34      303  1    
 200276     175 67.5 70    40.50      310  1    
 201107     176 67.5 70    41.54      311  1    
 200892     179 67.5 70    44.10      313  1    
 200891     198 67.5 70    62.84      332  1    
 201082     208 67.5 70    73.80      343  1    
 201653     213 67.5 70    78.34      348  1    
 200308     223 67.5 70    88.37      358  1    
 201054     244 67.5 70   109.77      379  1    
 200465     249 67.5 70   114.00      383  1    
 201028     256 67.5 70   120.87      390  1    
 200278     258 67.5 70   123.47      393  1    
 201248     259 67.5 70   123.87      393  1    
 200317     274 67.5 70   139.37      409  1    
 201044     278 67.5 70   143.64      413  1    
 200271     282 67.5 70   147.07      416  1    
 200785     284 67.5 70   149.54      419  1    
 201842     289 67.5 70   154.54      424  1    
 control    300 67.5 70   165.04      434  1    
 201293     307 67.5 70   172.20      442  1    
 200559     321 67.5 70   186.04      455  1    
 201461     321 67.5 70   186.30      456  1    
 200437     334 67.5 70   199.80      469  1    
 200646     376 82.7 70   211.27      541  1    
 201620     377 67.5 70   242.37      512  1    
 200993     391 67.5 70   255.97      525  1    
 200509     398 67.5 70   263.67      533  1    
 200464     430 67.5 70   295.84      565  1    
 200944     438 67.5 70   303.67      573  1    
 200432     446 67.5 70   311.67      581  1    
 200791     477 67.5 70   342.04      611  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 36 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.4_WS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.4.4. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.4_WS, trt.vs.ctrl~isolate,ref=36)$contrasts, alpha=0.1), main="Mean Wet Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

No significant effect of inoculation treatment on mean wet shoot weight for batch 3.4 was observed. Confidence intervals for mean estimates of isolates that produced positive weight differences relative to the control are highly overlapping.

Batch 3.5

# analyze set 3.5 data
str(set_3.5)
'data.frame':   456 obs. of  4 variables:
 $ isolate: chr  "201928" "201928" "201928" "201928" ...
 $ rep    : int  1 1 1 1 1 1 2 2 2 2 ...
 $ sample : chr  "WS" "WR" "DS" "DR" ...
 $ mg     : num  NA NA NA NA NA NA NA NA NA NA ...
#subset by sample type
set_3.5_DR <- filter(set_3.5, sample == "DR")
set_3.5_DS <- filter(set_3.5, sample == "DS")
set_3.5_WR <- filter(set_3.5, sample == "WR")
set_3.5_WS <- filter(set_3.5, sample == "WS")

Experimental Design Table

Structure Factor Type # levels
Treatment Isolate Qualitative 26
Design MS Media Slants Experimental Unit 78
Response Plant Tissue Weight Observational Unit 312
Response Dry Root Weight (DR) Variable 78
Response Dry Shoot Weight (DS) Variable 78
Response Wet Root Weight (WR) Variable 78
Response Wet Shoot Weight (WS) Variable 78

3.5.1. Dry Root Weight

# linear model of dry root data
lm_set_3.5_DR <- lm(mg ~ 1 + isolate, set_3.5_DR)
op = par(mfrow=c(1,2))
plot(lm_set_3.5_DR, which = c(2,3))
not plotting observations with leverage one:
  9, 58
par(op)

3.5.1. - Anova

# assess variance
anova(lm_set_3.5_DR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   21 54.707  2.6051   1.593 0.1025
Residuals 39 63.778  1.6353               

3.5.1. - LSMeans - Dunnett

lsm_s3.5.dun.DR <- summary(lsmeans(lm_set_3.5_DR, trt.vs.ctrl ~isolate, ref=22)$contrasts, infer = c(T,T))
write.csv(lsm_s3.5.dun.DR, "./lsmeans_summary_tables/lsm_s3.5.dun.DR.csv")

3.5.1. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.5_DR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean    SE df lower.CL upper.CL .group
 201075    0.90 1.279 39 -1.68663     3.49  1    
 202001    1.13 0.738 39 -0.36006     2.63  1    
 201024    1.23 0.738 39 -0.26006     2.73  1    
 200327    1.40 0.738 39 -0.09339     2.89  1    
 200994    1.50 0.738 39  0.00661     2.99  1    
 201297    1.60 1.279 39 -0.98663     4.19  1    
 200593    1.67 0.738 39  0.17328     3.16  1    
 201997    1.70 0.738 39  0.20661     3.19  1    
 200508    1.70 0.738 39  0.20661     3.19  1    
 200440    1.73 0.738 39  0.23994     3.23  1    
 201258    1.77 0.738 39  0.27328     3.26  1    
 200267    1.80 0.738 39  0.30661     3.29  1    
 201947    2.10 0.738 39  0.60661     3.59  1    
 Control   2.63 0.738 39  1.13994     4.13  1    
 200315    2.73 0.738 39  1.23994     4.23  1    
 200302    2.80 0.738 39  1.30661     4.29  1    
 201058    3.43 0.738 39  1.93994     4.93  1    
 201443    3.47 0.738 39  1.97328     4.96  1    
 200735    3.63 0.738 39  2.13994     5.13  1    
 200514    3.83 0.738 39  2.33994     5.33  1    
 200624    3.85 0.904 39  2.02098     5.68  1    
 200931    3.90 0.738 39  2.40661     5.39  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 22 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.5_DR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.5.1. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.5_DR, trt.vs.ctrl~isolate,ref=22)$contrasts, alpha=0.1), main="Mean Dry Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

No significant effect.

3.5.2. Dry Shoot Weight

# linear model of dry shoot data
lm_set_3.5_DS <- lm(mg ~ 1 + isolate, set_3.5_DS)
op = par(mfrow=c(1,2))
plot(lm_set_3.5_DS, which = c(2,3))
not plotting observations with leverage one:
  9, 58
par(op)

3.5.2. - Anova

# assess variance
anova(lm_set_3.5_DS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   21  765.1  36.434  0.8293 0.6705
Residuals 39 1713.3  43.931               

3.5.2. - LSMeans - Dunnett

lsm_s3.5.dun.DS <- summary(lsmeans(lm_set_3.5_DS, trt.vs.ctrl ~isolate, ref=22)$contrasts, infer = c(T,T))
write.csv(lsm_s3.5.dun.DS, "./lsmeans_summary_tables/lsm_s3.5.dun.DS.csv")

3.5.2. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.5_DS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 201024    8.97 3.83 39     1.23     16.7  1    
 200327    9.60 3.83 39     1.86     17.3  1    
 201075   11.20 6.63 39    -2.21     24.6  1    
 200994   12.93 3.83 39     5.19     20.7  1    
 201443   12.97 3.83 39     5.23     20.7  1    
 200593   13.27 3.83 39     5.53     21.0  1    
 200302   15.13 3.83 39     7.39     22.9  1    
 201058   15.13 3.83 39     7.39     22.9  1    
 202001   15.23 3.83 39     7.49     23.0  1    
 Control  15.80 3.83 39     8.06     23.5  1    
 200440   16.30 3.83 39     8.56     24.0  1    
 201947   16.60 3.83 39     8.86     24.3  1    
 201997   16.87 3.83 39     9.13     24.6  1    
 201258   17.07 3.83 39     9.33     24.8  1    
 200267   17.47 3.83 39     9.73     25.2  1    
 200514   18.03 3.83 39    10.29     25.8  1    
 200508   18.63 3.83 39    10.89     26.4  1    
 200315   19.57 3.83 39    11.83     27.3  1    
 200735   19.80 3.83 39    12.06     27.5  1    
 201297   21.00 6.63 39     7.59     34.4  1    
 200624   21.30 4.69 39    11.82     30.8  1    
 200931   23.70 3.83 39    15.96     31.4  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 22 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.5_DS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.5.2. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.5_DS, trt.vs.ctrl~isolate,ref=22)$contrasts, alpha=0.1), main="Mean Dry Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

No significant positive effects were observed for mean dry shoot weight in batch 3.5.

3.5.3. Wet Root Weight

# linear model of wet root data
lm_set_3.5_WR <- lm(mg ~ 1 + isolate, set_3.5_WR)
op = par(mfrow=c(1,2))
plot(lm_set_3.5_WR, which = c(2,3))
not plotting observations with leverage one:
  9, 58
par(op)

3.5.3. - Anova

# assess variance
anova(lm_set_3.5_WR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   21  12426  591.72  1.4796 0.1423
Residuals 39  15596  399.91               

3.5.3. - LSMeans - Dunnett

lsm_s3.5.dun.WR <- summary(lsmeans(lm_set_3.5_WR, trt.vs.ctrl ~isolate, ref=22)$contrasts, infer = c(T,T))
write.csv(lsm_s3.5.dun.WR, "./lsmeans_summary_tables/lsm_s3.5.dun.WR.csv")

3.5.3. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.5_WR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 202001    16.5 11.5 39   -6.887     39.8  1    
 201024    17.0 11.5 39   -6.320     40.4  1    
 201075    17.6 20.0 39  -22.849     58.0  1    
 200327    19.2 11.5 39   -4.153     42.6  1    
 201997    22.5 11.5 39   -0.887     45.8  1    
 201258    24.7 11.5 39    1.313     48.0  1    
 200994    25.9 11.5 39    2.580     49.3  1    
 200440    27.7 11.5 39    4.313     51.0  1    
 200508    27.9 11.5 39    4.547     51.3  1    
 200267    29.1 11.5 39    5.713     52.4  1    
 200593    31.1 11.5 39    7.713     54.4  1    
 201297    32.3 20.0 39   -8.149     72.7  1    
 201947    32.4 11.5 39    9.080     55.8  1    
 200302    36.2 11.5 39   12.880     59.6  1    
 200315    39.3 11.5 39   15.980     62.7  1    
 201058    42.2 11.5 39   18.847     65.6  1    
 200735    47.5 11.5 39   24.113     70.8  1    
 201443    51.7 11.5 39   28.313     75.0  1    
 200624    56.0 14.1 39   27.348     84.6  1    
 200514    58.5 11.5 39   35.147     81.9  1    
 200931    59.8 11.5 39   36.447     83.2  1    
 Control   60.6 11.5 39   37.280     84.0  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 22 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.5_WR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.5.3. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.5_WR, trt.vs.ctrl~isolate,ref=22)$contrasts, alpha=0.1), main="Mean Wet Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

No significant positive effects observed for wet root weight of batch 3.5.

3.5.4. Wet Shoot Weight

# linear model of wet shoot data
lm_set_3.5_WS <- lm(mg ~ 1 + isolate, set_3.5_WS)
op = par(mfrow=c(1,2))
plot(lm_set_3.5_WS, which = c(2,3))
not plotting observations with leverage one:
  9, 58
par(op)

3.5.4. - Anova

# assess variance
anova(lm_set_3.5_WS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   21 271402   12924  0.8343 0.6651
Residuals 39 604167   15492               

3.5.4. - LSMeans - Dunnett

lsm_s3.5.dun.WS <- summary(lsmeans(lm_set_3.5_WS, trt.vs.ctrl ~isolate, ref=22)$contrasts, infer = c(T,T))
write.csv(lsm_s3.5.dun.WS, "./lsmeans_summary_tables/lsm_s3.5.dun.WS.csv")

3.5.4. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_3.5_WS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean    SE df lower.CL upper.CL .group
 201024     139  71.9 39    -6.65      284  1    
 200327     140  71.9 39    -4.95      286  1    
 201075     160 124.5 39   -91.55      412  1    
 201443     193  71.9 39    47.98      339  1    
 200994     217  71.9 39    71.88      363  1    
 200302     246  71.9 39   101.02      392  1    
 201258     252  71.9 39   106.18      397  1    
 200593     255  71.9 39   109.78      400  1    
 201058     264  71.9 39   118.78      409  1    
 200440     269  71.9 39   123.85      415  1    
 202001     272  71.9 39   126.25      417  1    
 201997     279  71.9 39   134.05      425  1    
 201947     289  71.9 39   143.85      435  1    
 200514     293  71.9 39   148.08      439  1    
 201297     304 124.5 39    52.25      556  1    
 200267     308  71.9 39   162.25      453  1    
 200315     321  71.9 39   175.18      466  1    
 200508     326  71.9 39   181.15      472  1    
 200735     330  71.9 39   184.65      475  1    
 Control    347  71.9 39   201.75      492  1    
 200624     365  88.0 39   186.78      543  1    
 200931     407  71.9 39   261.25      552  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 22 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_3.5_WS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

3.5.4. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_3.5_WS, trt.vs.ctrl~isolate,ref=22)$contrasts, alpha=0.1), main="Mean Wet Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

No significant positive effect was observed for Wet Shoot weight in batch 3.5 inoculations.

Batch 4.1

# analyze set 4.1 data
str(set_4.1)
'data.frame':   690 obs. of  4 variables:
 $ isolate: chr  "200660" "200660" "200660" "200660" ...
 $ rep    : int  1 1 1 1 1 1 2 2 2 2 ...
 $ sample : chr  "WS" "WR" "DS" "DR" ...
 $ mg     : num  193.2 8.9 15.8 1.1 58557.8 ...
#subset by sample type
set_4.1_DR <- filter(set_4.1, sample == "DR")
set_4.1_DS <- filter(set_4.1, sample == "DS")
set_4.1_WR <- filter(set_4.1, sample == "WR")
set_4.1_WS <- filter(set_4.1, sample == "WS")

Experimental Design Table

Structure Factor Type # levels
Treatment Isolate Qualitative 39
Design MS Media Slants Experimental Unit 117
Response Plant Tissue Weight Observational Unit 468
Response Dry Root Weight (DR) Variable 117
Response Dry Shoot Weight (DS) Variable 117
Response Wet Root Weight (WR) Variable 117
Response Wet Shoot Weight (WS) Variable 117

4.1.1. Dry Root Weight

# linear model of dry root data
lm_set_4.1_DR <- lm(mg ~ 1 + isolate, set_4.1_DR)
op = par(mfrow=c(1,2))
plot(lm_set_4.1_DR, which = c(2,3))
par(op)

4.1.1. - Anova

# assess variance
anova(lm_set_4.1_DR)
Analysis of Variance Table

Response: mg
          Df  Sum Sq Mean Sq F value Pr(>F)
isolate   36  70.319  1.9533  1.2786 0.1874
Residuals 71 108.463  1.5276               

4.1.1. - LSMeans - Dunnett

lsm_s4.1.dun.DR <- summary(lsmeans(lm_set_4.1_DR, trt.vs.ctrl ~isolate, ref=37)$contrasts, infer = c(T,T))
write.csv(lsm_s4.1.dun.DR, "./lsmeans_summary_tables/lsm_s4.1.dun.DR.csv")

4.1.1. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_4.1_DR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean    SE df lower.CL upper.CL .group
 200663   0.767 0.714 71  -0.6562     2.19  1    
 200915   0.800 0.714 71  -0.6229     2.22  1    
 201155   1.000 0.874 71  -0.7426     2.74  1    
 200775   1.100 0.714 71  -0.3229     2.52  1    
 201890   1.233 0.714 71  -0.1895     2.66  1    
 200951   1.267 0.714 71  -0.1562     2.69  1    
 200577   1.300 0.714 71  -0.1229     2.72  1    
 200660   1.367 0.714 71  -0.0562     2.79  1    
 200973   1.400 0.714 71  -0.0229     2.82  1    
 200800   1.433 0.714 71   0.0105     2.86  1    
 201291   1.450 0.874 71  -0.2926     3.19  1    
 201186   1.467 0.714 71   0.0438     2.89  1    
 201292   1.500 0.714 71   0.0771     2.92  1    
 201945   1.500 0.714 71   0.0771     2.92  1    
 200527   1.700 0.714 71   0.2771     3.12  1    
 200319   1.767 0.714 71   0.3438     3.19  1    
 200553   1.800 0.714 71   0.3771     3.22  1    
 201662   1.800 0.714 71   0.3771     3.22  1    
 200587   1.833 0.714 71   0.4105     3.26  1    
 200589   1.900 0.714 71   0.4771     3.32  1    
 200458   1.967 0.714 71   0.5438     3.39  1    
 200294   1.967 0.714 71   0.5438     3.39  1    
 200874   1.967 0.714 71   0.5438     3.39  1    
 200268   2.000 0.714 71   0.5771     3.42  1    
 200545   2.000 0.714 71   0.5771     3.42  1    
 201238   2.133 0.714 71   0.7105     3.56  1    
 202006   2.200 0.714 71   0.7771     3.62  1    
 200814   2.567 0.714 71   1.1438     3.99  1    
 200738   2.667 0.714 71   1.2438     4.09  1    
 200984   2.933 0.714 71   1.5105     4.36  1    
 201103   2.933 0.714 71   1.5105     4.36  1    
 200561   2.967 0.714 71   1.5438     4.39  1    
 200910   3.250 0.874 71   1.5074     4.99  1    
 201654   3.367 0.714 71   1.9438     4.79  1    
 200311   3.533 0.714 71   2.1105     4.96  1    
 control  3.600 0.714 71   2.1771     5.02  1    
 200471   3.933 0.714 71   2.5105     5.36  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 37 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_4.1_DR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

4.1.1. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_4.1_DR, trt.vs.ctrl~isolate,ref=37)$contrasts, alpha=0.1), main="Mean Dry Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

No significant positive effect observed for inoculum treatment based on dry root measurements of batch 4.1.

4.1.2. Dry Shoot Weight

# linear model of dry shoot data
lm_set_4.1_DS <- lm(mg ~ 1 + isolate, set_4.1_DS)
op = par(mfrow=c(1,2))
plot(lm_set_4.1_DS, which = c(2,3))
par(op)

4.1.2. - Anova

# assess variance
anova(lm_set_4.1_DS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value  Pr(>F)  
isolate   36 3372.5  93.680  1.7043 0.02811 *
Residuals 71 3902.7  54.968                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

4.1.2. - LSMeans - Dunnett

lsm_s4.1.dun.DS <- summary(lsmeans(lm_set_4.1_DS, trt.vs.ctrl ~isolate, ref=37)$contrasts, infer = c(T,T))
write.csv(lsm_s4.1.dun.DS, "./lsmeans_summary_tables/lsm_s4.1.dun.DS.csv")

4.1.2. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_4.1_DS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200915     8.4 4.28 71   -0.135     16.9  1    
 200775    10.4 4.28 71    1.898     19.0  12   
 200294    10.6 4.28 71    2.065     19.1  12   
 201890    11.7 4.28 71    3.165     20.2  12   
 202006    12.3 4.28 71    3.798     20.9  12   
 201292    12.7 4.28 71    4.198     21.3  12   
 200458    13.2 4.28 71    4.632     21.7  12   
 200527    13.2 4.28 71    4.632     21.7  12   
 200589    13.8 4.28 71    5.265     22.3  12   
 201103    14.8 4.28 71    6.265     23.3  12   
 200311    14.9 4.28 71    6.332     23.4  12   
 200951    15.0 4.28 71    6.498     23.6  12   
 200319    15.8 4.28 71    7.232     24.3  12   
 200660    15.9 4.28 71    7.398     24.5  12   
 201291    15.9 5.24 71    5.497     26.4  12   
 200663    16.6 4.28 71    8.032     25.1  12   
 200973    17.6 4.28 71    9.032     26.1  12   
 control   17.7 4.28 71    9.132     26.2  12   
 200577    17.7 4.28 71    9.132     26.2  12   
 200553    19.5 4.28 71   10.965     28.0  12   
 200910    20.4 5.24 71    9.897     30.8  12   
 200874    20.4 4.28 71   11.865     28.9  12   
 201662    20.6 4.28 71   12.065     29.1  12   
 201945    20.8 4.28 71   12.298     29.4  12   
 201155    21.1 5.24 71   10.647     31.6  12   
 200268    21.5 4.28 71   12.998     30.1  12   
 200545    22.2 4.28 71   13.665     30.7  12   
 200471    22.5 4.28 71   13.998     31.1  12   
 201186    22.7 4.28 71   14.198     31.3  12   
 200800    23.1 4.28 71   14.598     31.7  12   
 201238    23.3 4.28 71   14.732     31.8  12   
 200587    24.3 4.28 71   15.732     32.8  12   
 200561    25.2 4.28 71   16.665     33.7  12   
 201654    26.3 4.28 71   17.732     34.8  12   
 200814    27.3 4.28 71   18.765     35.8  12   
 200738    29.3 4.28 71   20.732     37.8  12   
 200984    32.0 4.28 71   23.432     40.5   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 37 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_4.1_DS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

4.1.2. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_4.1_DS, trt.vs.ctrl~isolate,ref=37)$contrasts, alpha=0.1), main="Mean Dry Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

There are no significant positive effects observed based on measurements of dry shoot weight for plants inoculated with isolates in batch 4.1.

4.1.3. Wet Root Weight

# linear model of wet root data
lm_set_4.1_WR <- lm(mg ~ 1 + isolate, set_4.1_WR)
op = par(mfrow=c(1,2))
plot(lm_set_4.1_WR, which = c(2,3))
par(op)

4.1.3. - Anova

# assess variance
anova(lm_set_4.1_WR)
Analysis of Variance Table

Response: mg
          Df  Sum Sq Mean Sq F value  Pr(>F)  
isolate   36  9240.3  256.68  1.6359 0.03899 *
Residuals 71 11140.1  156.90                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

4.1.3. - LSMeans - Dunnett

lsm_s4.1.dun.WR <- summary(lsmeans(lm_set_4.1_WR, trt.vs.ctrl ~isolate, ref=37)$contrasts, infer = c(T,T))
write.csv(lsm_s4.1.dun.WR, "./lsmeans_summary_tables/lsm_s4.1.dun.WR.csv")

4.1.3. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_4.1_WR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200663    9.13 7.23 71   -5.287     23.6  1    
 201291   11.55 8.86 71   -6.111     29.2  1    
 200577   12.33 7.23 71   -2.087     26.8  1    
 200660   13.30 7.23 71   -1.120     27.7  1    
 200915   13.80 7.23 71   -0.620     28.2  1    
 201155   13.90 8.86 71   -3.761     31.6  1    
 201186   14.57 7.23 71    0.147     29.0  1    
 201292   15.40 7.23 71    0.980     29.8  1    
 200800   15.40 7.23 71    0.980     29.8  1    
 201890   15.80 7.23 71    1.380     30.2  1    
 200951   16.10 7.23 71    1.680     30.5  1    
 200973   16.33 7.23 71    1.913     30.8  1    
 200775   16.87 7.23 71    2.447     31.3  1    
 200319   19.80 7.23 71    5.380     34.2  1    
 200294   20.17 7.23 71    5.747     34.6  1    
 201945   20.37 7.23 71    5.947     34.8  1    
 200587   20.97 7.23 71    6.547     35.4  1    
 201662   21.00 7.23 71    6.580     35.4  1    
 200553   21.90 7.23 71    7.480     36.3  1    
 200527   22.00 7.23 71    7.580     36.4  1    
 200268   22.07 7.23 71    7.647     36.5  1    
 200874   23.83 7.23 71    9.413     38.3  1    
 201238   24.23 7.23 71    9.813     38.7  1    
 202006   24.30 7.23 71    9.880     38.7  1    
 200545   25.43 7.23 71   11.013     39.9  1    
 200589   26.33 7.23 71   11.913     40.8  1    
 201103   26.33 7.23 71   11.913     40.8  1    
 200458   27.67 7.23 71   13.247     42.1  1    
 200814   29.63 7.23 71   15.213     44.1  1    
 200561   30.60 7.23 71   16.180     45.0  1    
 200738   33.73 7.23 71   19.313     48.2  1    
 201654   37.23 7.23 71   22.813     51.7  1    
 200910   37.30 8.86 71   19.639     55.0  1    
 200984   39.70 7.23 71   25.280     54.1  1    
 200471   41.20 7.23 71   26.780     55.6  1    
 200311   42.03 7.23 71   27.613     56.5  1    
 control  44.80 7.23 71   30.380     59.2  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 37 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_4.1_WR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

4.1.3. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_4.1_WR, trt.vs.ctrl~isolate,ref=37)$contrasts, alpha=0.1), main="Mean Wet Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

Control is the highest mean estimate. All significant effects are negative on mean wet root weight.

4.1.4. Wet Shoot Weight

# linear model of wet shoot data
lm_set_4.1_WS <- lm(mg ~ 1 + isolate, set_4.1_WS)
op = par(mfrow=c(1,2))
plot(lm_set_4.1_WS, which = c(2,3))
par(op)

4.1.4. - Anova

# assess variance
anova(lm_set_4.1_WS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value  Pr(>F)  
isolate   36 825779   22938  1.6896 0.03018 *
Residuals 71 963933   13576                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

4.1.4. - LSMeans - Dunnett

lsm_s4.1.dun.WS <- summary(lsmeans(lm_set_4.1_WS, trt.vs.ctrl ~isolate, ref=37)$contrasts, infer = c(T,T))
write.csv(lsm_s4.1.dun.WS, "./lsmeans_summary_tables/lsm_s4.1.dun.WS.csv")

4.1.4. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_4.1_WS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 200294     132 67.3 71    -2.34      266  1    
 200775     142 67.3 71     7.56      276  1    
 200915     152 67.3 71    18.03      286  1    
 201890     156 67.3 71    22.36      291  1    
 202006     157 67.3 71    22.40      291  1    
 200589     171 67.3 71    37.33      306  12   
 200527     174 67.3 71    40.33      309  12   
 201292     181 67.3 71    46.43      315  12   
 200951     200 67.3 71    66.10      334  12   
 200458     201 67.3 71    67.23      336  12   
 200319     203 67.3 71    68.73      337  12   
 201291     206 82.4 71    42.02      371  12   
 200660     212 67.3 71    77.53      346  12   
 201103     216 67.3 71    82.20      350  12   
 200311     225 67.3 71    91.16      359  12   
 200663     230 67.3 71    96.20      364  12   
 200577     232 67.3 71    98.13      366  12   
 201155     258 82.4 71    94.02      423  12   
 200973     266 67.3 71   132.16      400  12   
 200874     268 67.3 71   133.66      402  12   
 201662     268 67.3 71   134.30      403  12   
 200910     276 82.4 71   111.92      440  12   
 control    280 67.3 71   146.23      415  12   
 201186     283 67.3 71   148.70      417  12   
 200553     300 67.3 71   165.83      434  12   
 200268     305 67.3 71   170.86      439  12   
 201945     313 67.3 71   178.83      447  12   
 201238     317 67.3 71   182.53      451  12   
 200545     318 67.3 71   183.73      452  12   
 200587     326 67.3 71   192.13      460  12   
 200471     331 67.3 71   196.90      465  12   
 200800     357 67.3 71   222.66      491  12   
 201654     357 67.3 71   222.73      491  12   
 200561     358 67.3 71   223.60      492  12   
 200814     381 67.3 71   246.83      515  12   
 200738     440 67.3 71   305.40      574  12   
 200984     529 67.3 71   395.16      663   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 37 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_4.1_WS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

4.1.4. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_4.1_WS, trt.vs.ctrl~isolate,ref=37)$contrasts, alpha=0.1), main="Mean Wet Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

Highest mean producing isolate (BCW200984) has lower Confidence limit that overlaps with upper of control.

Batch 4.2

# analyze set 4.2 data
str(set_4.2)
'data.frame':   600 obs. of  4 variables:
 $ isolate: chr  "201813" "201813" "201813" "201813" ...
 $ rep    : int  1 1 1 1 1 1 2 2 2 2 ...
 $ sample : chr  "WS" "WR" "DS" "DR" ...
 $ mg     : num  NA NA NA NA 58453 ...
#subset by sample type
set_4.2_DR <- filter(set_4.2, sample == "DR")
set_4.2_DS <- filter(set_4.2, sample == "DS")
set_4.2_WR <- filter(set_4.2, sample == "WR")
set_4.2_WS <- filter(set_4.2, sample == "WS")

Experimental Design Table

Structure Factor Type # levels
Treatment Isolate Qualitative 33
Design MS Media Slants Experimental Unit 99
Response Plant Tissue Weight Observational Unit 396
Response Dry Root Weight (DR) Variable 99
Response Dry Shoot Weight (DS) Variable 99
Response Wet Root Weight (WR) Variable 99
Response Wet Shoot Weight (WS) Variable 99

4.2.1. Dry Root Weight

# linear model of dry root data
lm_set_4.2_DR <- lm(mg ~ 1 + isolate, set_4.2_DR)
op = par(mfrow=c(1,2))
plot(lm_set_4.2_DR, which = c(2,3))
not plotting observations with leverage one:
  19
par(op)

4.2.1. - Anova

# assess variance
anova(lm_set_4.2_DR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value  Pr(>F)  
isolate   23 29.289 1.27345  1.7851 0.04461 *
Residuals 49 34.955 0.71337                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

4.2.1. - LSMeans - Dunnett

lsm_s4.2.dun.DR <- summary(lsmeans(lm_set_4.2_DR, trt.vs.ctrl ~isolate, ref=24)$contrasts, infer = c(T,T))
write.csv(lsm_s4.2.dun.DR, "./lsmeans_summary_tables/lsm_s4.2.dun.DR.csv")

4.2.1. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_4.2_DR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean    SE df lower.CL upper.CL .group
 control  0.833 0.488 49   -0.147     1.81  1    
 201917   1.100 0.488 49    0.120     2.08  12   
 201990   1.100 0.488 49    0.120     2.08  12   
 200556   1.200 0.488 49    0.220     2.18  12   
 200715   1.200 0.488 49    0.220     2.18  12   
 201933   1.300 0.488 49    0.320     2.28  12   
 201888   1.433 0.488 49    0.453     2.41  12   
 201870   1.500 0.845 49   -0.197     3.20  12   
 201887   1.567 0.488 49    0.587     2.55  12   
 200808   1.633 0.488 49    0.653     2.61  12   
 201818   1.633 0.488 49    0.653     2.61  12   
 201880   1.683 0.345 49    0.990     2.38  12   
 201910   1.767 0.488 49    0.787     2.75  12   
 201895   1.833 0.488 49    0.853     2.81  12   
 201868   1.867 0.488 49    0.887     2.85  12   
 200533   1.900 0.488 49    0.920     2.88  12   
 201874   1.933 0.488 49    0.953     2.91  12   
 200444   2.200 0.488 49    1.220     3.18  12   
 201909   2.200 0.488 49    1.220     3.18  12   
 201899   2.367 0.488 49    1.387     3.35  12   
 201823   2.467 0.488 49    1.487     3.45  12   
 201085   2.467 0.488 49    1.487     3.45  12   
 201084   3.267 0.488 49    2.287     4.25  12   
 201815   3.500 0.488 49    2.520     4.48   2   

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 24 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_4.2_DR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

4.2.1. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_4.2_DR, trt.vs.ctrl~isolate,ref=24)$contrasts, alpha=0.1), main="Mean Dry Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

BCW201815 and BCW201084 inoculated plants had higher mean dry root weights than the control, and the confidence intervals for these estimates do not overlap with those of the control mean.

4.2.2. Dry Shoot Weight

# linear model of dry shoot data
lm_set_4.2_DS <- lm(mg ~ 1 + isolate, set_4.2_DS)
op = par(mfrow=c(1,2))
plot(lm_set_4.2_DS, which = c(2,3))
not plotting observations with leverage one:
  19
par(op)

4.2.2. - Anova

# assess variance
anova(lm_set_4.2_DS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   23 1664.5  72.369  0.8848 0.6157
Residuals 49 4007.9  81.794               

4.2.2. - LSMeans - Dunnett

lsm_s4.2.dun.DS <- summary(lsmeans(lm_set_4.2_DS, trt.vs.ctrl ~isolate, ref=24)$contrasts, infer = c(T,T))
write.csv(lsm_s4.2.dun.DS, "./lsmeans_summary_tables/lsm_s4.2.dun.DS.csv")

4.2.2. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_4.2_DS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 control   14.9 5.22 49     4.37     25.4  1    
 200556    16.2 5.22 49     5.71     26.7  1    
 201874    18.0 5.22 49     7.47     28.5  1    
 201818    18.4 5.22 49     7.87     28.9  1    
 200533    19.5 5.22 49     9.04     30.0  1    
 201888    19.8 5.22 49     9.27     30.3  1    
 201910    19.8 5.22 49     9.31     30.3  1    
 201895    20.8 5.22 49    10.31     31.3  1    
 201870    21.0 9.04 49     2.83     39.2  1    
 200715    21.0 5.22 49    10.54     31.5  1    
 201917    22.0 5.22 49    11.51     32.5  1    
 201887    22.8 5.22 49    12.27     33.3  1    
 201880    24.0 3.69 49    16.55     31.4  1    
 201933    24.4 5.22 49    13.94     34.9  1    
 201909    24.6 5.22 49    14.14     35.1  1    
 201868    24.8 5.22 49    14.27     35.3  1    
 201990    25.7 5.22 49    15.24     36.2  1    
 200444    26.9 5.22 49    16.37     37.4  1    
 200808    26.9 5.22 49    16.44     37.4  1    
 201084    27.4 5.22 49    16.94     37.9  1    
 201823    28.7 5.22 49    18.17     39.2  1    
 201085    29.3 5.22 49    18.77     39.8  1    
 201899    30.2 5.22 49    19.74     40.7  1    
 201815    36.0 5.22 49    25.47     46.5  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 24 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_4.2_DS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

4.2.2. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_4.2_DS, trt.vs.ctrl~isolate,ref=24)$contrasts, alpha=0.1), main="Mean Dry Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

No significant effect observed for dry shoot weight of batch 4.2 at an alpha level of 0.1, but BCW201815 is very close to having non-overlapping CI for the mean estimate.

4.2.3. Wet Root Weight

# linear model of wet root data
lm_set_4.2_WR <- lm(mg ~ 1 + isolate, set_4.2_WR)
op = par(mfrow=c(1,2))
plot(lm_set_4.2_WR, which = c(2,3))
not plotting observations with leverage one:
  19
par(op)

4.2.3. - Anova

# assess variance
anova(lm_set_4.2_WR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   23 3760.6  163.51  1.4824 0.1231
Residuals 49 5404.5  110.30               

4.2.3. - LSMeans - Dunnett

lsm_s4.2.dun.WR <- summary(lsmeans(lm_set_4.2_WR, trt.vs.ctrl ~isolate, ref=24)$contrasts, infer = c(T,T))
write.csv(lsm_s4.2.dun.WR, "./lsmeans_summary_tables/lsm_s4.2.dun.WR.csv")

4.2.3. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_4.2_WR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean    SE df lower.CL upper.CL .group
 control   13.3  6.06 49     1.15     25.5  1    
 201990    16.9  6.06 49     4.68     29.1  1    
 200715    17.2  6.06 49     5.05     29.4  1    
 201917    17.6  6.06 49     5.38     29.8  1    
 200556    18.8  6.06 49     6.62     31.0  1    
 201888    19.1  6.06 49     6.92     31.3  1    
 201933    20.3  6.06 49     8.08     32.5  1    
 201887    20.3  6.06 49     8.15     32.5  1    
 200533    21.4  6.06 49     9.25     33.6  1    
 200808    21.7  6.06 49     9.48     33.9  1    
 201818    22.2  6.06 49     9.98     34.4  1    
 201895    22.8  6.06 49    10.62     35.0  1    
 201880    23.4  4.29 49    14.75     32.0  1    
 201874    24.6  6.06 49    12.42     36.8  1    
 201870    24.9 10.50 49     3.80     46.0  1    
 201909    25.7  6.06 49    13.55     37.9  1    
 201899    27.2  6.06 49    15.02     39.4  1    
 200444    29.9  6.06 49    17.72     42.1  1    
 201868    30.7  6.06 49    18.48     42.9  1    
 201823    31.0  6.06 49    18.82     43.2  1    
 201910    31.5  6.06 49    19.35     43.7  1    
 201085    34.8  6.06 49    22.62     47.0  1    
 201815    40.6  6.06 49    28.42     52.8  1    
 201084    42.2  6.06 49    30.05     54.4  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 24 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_4.2_WR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

4.2.3. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_4.2_WR, trt.vs.ctrl~isolate,ref=24)$contrasts, alpha=0.1), main="Mean Wet Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

BCW201084 and BCW201815 both have mean wet root weight estimates higher than the control and the confidence intervals for these two isolate’s mean estimates do not overlap with those of the control.

4.2.4. Wet Shoot Weight

# linear model of wet shoot data
lm_set_4.2_WS <- lm(mg ~ 1 + isolate, set_4.2_WS)
op = par(mfrow=c(1,2))
plot(lm_set_4.2_WS, which = c(2,3))
not plotting observations with leverage one:
  19
par(op)

4.2.4. - Anova

# assess variance
anova(lm_set_4.2_WS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   23 324195   14096  0.7205 0.8018
Residuals 49 958659   19564               

4.2.4. - LSMeans - Dunnett

lsm_s4.2.dun.WS <- summary(lsmeans(lm_set_4.2_WS, trt.vs.ctrl ~isolate, ref=24)$contrasts, infer = c(T,T))
write.csv(lsm_s4.2.dun.WS, "./lsmeans_summary_tables/lsm_s4.2.dun.WS.csv")

4.2.4. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_4.2_WS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean    SE df lower.CL upper.CL .group
 201887     206  80.8 49     43.6      368  1    
 control    251  80.8 49     88.5      413  1    
 200556     255  80.8 49     93.2      418  1    
 201874     266  80.8 49    103.4      428  1    
 201818     273  80.8 49    110.6      435  1    
 201910     289  80.8 49    126.3      451  1    
 200715     291  80.8 49    129.0      454  1    
 200533     314  80.8 49    152.0      477  1    
 201917     315  80.8 49    152.6      477  1    
 201888     319  80.8 49    156.5      481  1    
 201895     331  80.8 49    168.8      493  1    
 201909     368  80.8 49    206.0      531  1    
 201933     370  80.8 49    207.5      532  1    
 201990     374  80.8 49    211.6      536  1    
 201870     380 139.9 49     99.3      661  1    
 201880     381  57.1 49    265.8      495  1    
 201084     384  80.8 49    221.4      546  1    
 200808     387  80.8 49    224.9      550  1    
 200444     391  80.8 49    228.9      553  1    
 201868     408  80.8 49    245.3      570  1    
 201899     408  80.8 49    245.6      570  1    
 201823     419  80.8 49    256.6      581  1    
 201085     444  80.8 49    281.2      606  1    
 201815     480  80.8 49    317.5      642  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 24 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_4.2_WS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

4.2.4. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_4.2_WS, trt.vs.ctrl~isolate,ref=24)$contrasts, alpha=0.1), main="Mean Wet Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

There are no positive effects observed based on measurements of wet shoot weight for plants inoculated with isolates in batch 4.2 that have non-overlapping confidence intervals with those of the control.

Batch 4.3.

# analyze set 4.3 data
str(set_4.3)
'data.frame':   528 obs. of  4 variables:
 $ isolate: chr  "200723" "200723" "200723" "200723" ...
 $ rep    : int  1 1 1 1 1 1 2 2 2 2 ...
 $ sample : chr  "WS" "WR" "DS" "DR" ...
 $ mg     : num  376.9 9.3 22.3 0.2 58218.3 ...
#subset by sample type
set_4.3_DR <- filter(set_4.3, sample == "DR")
set_4.3_DS <- filter(set_4.3, sample == "DS")
set_4.3_WR <- filter(set_4.3, sample == "WR")
set_4.3_WS <- filter(set_4.3, sample == "WS")

Experimental Design Table

Structure Factor Type # levels
Treatment Isolate Qualitative 30
Design MS Media Slants Experimental Unit 90
Response Plant Tissue Weight Observational Unit 360
Response Dry Root Weight (DR) Variable 90
Response Dry Shoot Weight (DS) Variable 90
Response Wet Root Weight (WR) Variable 90
Response Wet Shoot Weight (WS) Variable 90

4.3.1. Dry Root Weight

# linear model of dry root data
lm_set_4.3_DR <- lm(mg ~ 1 + isolate, set_4.3_DR)
op = par(mfrow=c(1,2))
plot(lm_set_4.3_DR, which = c(2,3))
par(op)

4.3.1. - Anova

# assess variance
anova(lm_set_4.3_DR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   24 16.393 0.68303   0.714  0.813
Residuals 49 46.872 0.95656               

4.3.1. - LSMeans - Dunnett

lsm_s4.3.dun.DR <- summary(lsmeans(lm_set_4.3_DR, trt.vs.ctrl ~isolate, ref=25)$contrasts, infer = c(T,T))
write.csv(lsm_s4.3.dun.DR, "./lsmeans_summary_tables/lsm_s4.3.dun.DR.csv")

4.3.1. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_4.3_DR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean    SE df lower.CL upper.CL .group
 201853   0.667 0.565 49  -0.4681     1.80  1    
 200634   0.933 0.565 49  -0.2014     2.07  1    
 201884   0.967 0.565 49  -0.1681     2.10  1    
 200723   1.200 0.565 49   0.0652     2.33  1    
 201849   1.267 0.565 49   0.1319     2.40  1    
 201019   1.333 0.565 49   0.1986     2.47  1    
 201453   1.333 0.565 49   0.1986     2.47  1    
 201838   1.367 0.565 49   0.2319     2.50  1    
 200443   1.367 0.565 49   0.2319     2.50  1    
 200926   1.433 0.565 49   0.2986     2.57  1    
 201290   1.700 0.565 49   0.5652     2.83  1    
 200470   1.733 0.565 49   0.5986     2.87  1    
 200567   1.733 0.565 49   0.5986     2.87  1    
 200505   1.733 0.565 49   0.5986     2.87  1    
 200669   1.800 0.565 49   0.6652     2.93  1    
 201877   1.833 0.565 49   0.6986     2.97  1    
 201862   1.867 0.565 49   0.7319     3.00  1    
 201812   1.867 0.565 49   0.7319     3.00  1    
 201826   1.900 0.565 49   0.7652     3.03  1    
 201302   1.933 0.565 49   0.7986     3.07  1    
 200648   1.950 0.692 49   0.5602     3.34  1    
 201263   2.067 0.565 49   0.9319     3.20  1    
 201079   2.167 0.565 49   1.0319     3.30  1    
 201350   2.567 0.565 49   1.4319     3.70  1    
 Control  2.700 0.565 49   1.5652     3.83  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 25 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_4.3_DR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

4.3.1. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_4.3_DR, trt.vs.ctrl~isolate,ref=25)$contrasts, alpha=0.1), main="Mean Dry Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

No significant effect observed for dry root measurements in batch 4.3.

4.3.2. Dry Shoot Weight

# linear model of dry shoot data
lm_set_4.3_DS <- lm(mg ~ 1 + isolate, set_4.3_DS)
op = par(mfrow=c(1,2))
plot(lm_set_4.3_DS, which = c(2,3))
par(op)

4.3.2. - Anova

# assess variance
anova(lm_set_4.3_DS)
Analysis of Variance Table

Response: mg
          Df  Sum Sq Mean Sq F value Pr(>F)
isolate   24  889.38  37.058  0.6891 0.8376
Residuals 49 2634.98  53.775               

4.3.2. - LSMeans - Dunnett

lsm_s4.3.dun.DS <- summary(lsmeans(lm_set_4.3_DS, trt.vs.ctrl ~isolate, ref=25)$contrasts, infer = c(T,T))
write.csv(lsm_s4.3.dun.DS, "./lsmeans_summary_tables/lsm_s4.3.dun.DS.csv")

4.3.2. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_4.3_DS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 201849    12.1 4.23 49     3.59     20.6  1    
 200443    12.2 4.23 49     3.66     20.7  1    
 200926    12.6 4.23 49     4.09     21.1  1    
 201853    14.5 4.23 49     6.03     23.0  1    
 201884    14.7 4.23 49     6.16     23.2  1    
 201290    15.3 4.23 49     6.76     23.8  1    
 201812    15.4 4.23 49     6.86     23.9  1    
 201302    16.6 4.23 49     8.09     25.1  1    
 200470    16.9 4.23 49     8.39     25.4  1    
 201019    17.0 4.23 49     8.49     25.5  1    
 201838    17.0 4.23 49     8.53     25.5  1    
 200634    17.1 4.23 49     8.59     25.6  1    
 201877    17.2 4.23 49     8.73     25.7  1    
 200723    17.6 4.23 49     9.13     26.1  1    
 Control   17.9 4.23 49     9.39     26.4  1    
 200567    18.1 4.23 49     9.59     26.6  1    
 201862    18.2 4.23 49     9.69     26.7  1    
 200648    18.4 5.19 49     7.98     28.8  1    
 201826    19.2 4.23 49    10.69     27.7  1    
 200505    19.2 4.23 49    10.69     27.7  1    
 201079    21.2 4.23 49    12.73     29.7  1    
 201453    22.2 4.23 49    13.69     30.7  1    
 200669    23.2 4.23 49    14.66     31.7  1    
 201263    23.5 4.23 49    14.96     32.0  1    
 201350    26.3 4.23 49    17.76     34.8  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 25 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_4.3_DS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Dry Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

4.3.2. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Dry Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_4.3_DS, trt.vs.ctrl~isolate,ref=25)$contrasts, alpha=0.1), main="Mean Dry Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

No significant effect observed for dry shoot measurements in batch 4.3.

4.3.3. Wet Root Weight

# linear model of wet root data
lm_set_4.3_WR <- lm(mg ~ 1 + isolate, set_4.3_WR)
op = par(mfrow=c(1,2))
plot(lm_set_4.3_WR, which = c(2,3))
par(op)

4.3.3. - Anova

# assess variance
anova(lm_set_4.3_WR)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   24 3098.2  129.09  1.1735 0.3102
Residuals 49 5390.1  110.00               

4.3.3. - LSMeans - Dunnett

lsm_s4.3.dun.WR <- summary(lsmeans(lm_set_4.3_WR, trt.vs.ctrl ~isolate, ref=25)$contrasts, infer = c(T,T))
write.csv(lsm_s4.3.dun.WR, "./lsmeans_summary_tables/lsm_s4.3.dun.WR.csv")

4.3.3. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_4.3_WR, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 201853    9.27 6.06 49  -2.9020     21.4  1    
 201884   12.20 6.06 49   0.0313     24.4  1    
 200634   14.77 6.06 49   2.5980     26.9  1    
 201453   14.83 6.06 49   2.6646     27.0  1    
 201849   15.77 6.06 49   3.5980     27.9  1    
 201019   16.13 6.06 49   3.9646     28.3  1    
 200926   18.00 6.06 49   5.8313     30.2  1    
 200723   18.23 6.06 49   6.0646     30.4  1    
 200443   18.23 6.06 49   6.0646     30.4  1    
 200505   18.53 6.06 49   6.3646     30.7  1    
 201838   18.63 6.06 49   6.4646     30.8  1    
 200567   19.33 6.06 49   7.1646     31.5  1    
 201290   21.63 6.06 49   9.4646     33.8  1    
 201826   21.73 6.06 49   9.5646     33.9  1    
 200470   21.77 6.06 49   9.5980     33.9  1    
 201862   22.17 6.06 49   9.9980     34.3  1    
 200669   22.40 6.06 49  10.2313     34.6  1    
 200648   23.50 7.42 49   8.5964     38.4  1    
 201302   24.27 6.06 49  12.0980     36.4  1    
 201812   25.13 6.06 49  12.9646     37.3  1    
 201263   26.30 6.06 49  14.1313     38.5  1    
 201877   26.53 6.06 49  14.3646     38.7  1    
 201350   29.03 6.06 49  16.8646     41.2  1    
 201079   33.03 6.06 49  20.8646     45.2  1    
 Control  39.63 6.06 49  27.4646     51.8  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 25 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_4.3_WR, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Root Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

4.3.3. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Root Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_4.3_WR, trt.vs.ctrl~isolate,ref=25)$contrasts, alpha=0.1), main="Mean Wet Root Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

No significant positive effect observed for wet root measurements in batch 4.3.

4.3.4. Wet Shoot Weight

# linear model of wet shoot data
lm_set_4.3_WS <- lm(mg ~ 1 + isolate, set_4.3_WS)
op = par(mfrow=c(1,2))
plot(lm_set_4.3_WS, which = c(2,3))
par(op)

4.3.4. - Anova

# assess variance
anova(lm_set_4.3_WS)
Analysis of Variance Table

Response: mg
          Df Sum Sq Mean Sq F value Pr(>F)
isolate   24 216370  9015.4  0.6651 0.8598
Residuals 49 664198 13555.1               

4.3.4. - LSMeans - Dunnett

lsm_s4.3.dun.WS <- summary(lsmeans(lm_set_4.3_WS, trt.vs.ctrl ~isolate, ref=25)$contrasts, infer = c(T,T))
write.csv(lsm_s4.3.dun.WS, "./lsmeans_summary_tables/lsm_s4.3.dun.WS.csv")

4.3.4. - CLD - (Pairwise by isolate)

CLD(lsmeans(lm_set_4.3_WS, ~isolate), alpha=0.1)
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.
 isolate lsmean   SE df lower.CL upper.CL .group
 201849     199 67.2 49     63.6      334  1    
 201853     211 67.2 49     76.3      346  1    
 200443     212 67.2 49     77.0      347  1    
 200926     214 67.2 49     78.5      349  1    
 201884     218 67.2 49     82.9      353  1    
 201302     246 67.2 49    110.7      381  1    
 201290     246 67.2 49    111.3      381  1    
 200634     252 67.2 49    116.6      387  1    
 201838     256 67.2 49    120.5      391  1    
 201812     259 67.2 49    123.9      394  1    
 201019     262 67.2 49    126.9      397  1    
 200470     273 67.2 49    137.9      408  1    
 201862     287 67.2 49    151.6      422  1    
 200723     297 67.2 49    162.2      432  1    
 Control    303 67.2 49    167.8      438  1    
 200505     304 67.2 49    169.4      440  1    
 201877     307 67.2 49    171.6      442  1    
 201826     316 67.2 49    181.1      451  1    
 200648     318 82.3 49    152.1      483  1    
 201453     323 67.2 49    187.7      458  1    
 200567     323 67.2 49    187.7      458  1    
 200669     361 67.2 49    225.5      496  1    
 201079     363 67.2 49    228.1      498  1    
 201263     365 67.2 49    230.3      500  1    
 201350     403 67.2 49    267.7      538  1    

Confidence level used: 0.95 
P value adjustment: tukey method for comparing a family of 25 estimates 
significance level used: alpha = 0.1 
plot(CLD(lsmeans(lm_set_4.3_WS, ~isolate), alpha=0.1), main="All pairwise comparisons for Mean Wet Shoot Weight", xlab = "Mean Weight (mg)", ylab = "Isolate ID")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.

4.3.4. - CLD - Mean Estimate Differences to Control

Compact Letter Display of estimates for Wet Shoot Mean weight (mg) differences between plants that were inoculated with a mucilage isolates and the non-inoculated control.

plot(CLD(lsmeans(lm_set_4.3_WS, trt.vs.ctrl~isolate,ref=25)$contrasts, alpha=0.1), main="Mean Wet Shoot Weight Differences of Inoculated Plants vs. Control", xlab = "Difference of Mean Estimates (mg)", ylab = "Contrasts")
'CLD' will be deprecated. Its use is discouraged.
See '? CLD' for an explanation. Use 'pwpp' or 'multcomp::cld' instead.No information available to display confidence limits

No significant positive effect observed for inoculation treatments on wet shoot measurements in batch 4.3.

Summary

The isolates below were each found to have statistically significant differences in mean weight for the specified response variables that were measured, where inclusion in the summary table was contingent upon the confidence intervals for the estimates being non-overlapping with those of the experimental control group (alpha level of 0.1 with correction for multiple testing).

Isolate List Batch Response Difference from Control (mg)
BCW201858 1 Dry Root 9.70
BCW200727 1 Dry Shoot 21.08
BCW200556 1 Wet Root 95.85
BCW200533 1 Wet Root 93.01
BCW200810 2.1 Dry Shoot 21.75
BCW200810 2.1 Wet Root 60.9
BCW201873 2.1 Wet Root 70.43
BCW201809 2.1 Wet Root 62.01
BCW201864 2.1 Wet Root 65.43
BCW201849 2.2 Dry Root 5.02
BCW201849 2.2 Dry Shoot 29.35
BCW201849 2.2 Wet Shoot 415.22
BCW201881 2.3 Dry Root 11.94
BCW201900 2.4 Dry Root 5.63
BCW201900 2.4 Dry Shoot 25.92
BCW201814 2.4 Dry Shoot 24.19
BCW201900 2.4 Wet Root 79.7
BCW201814 2.4 Wet Shoot 248.28
BCW201900 2.4 Wet Shoot 397.05
BCW201088 3.1 Dry Root 3.90
BCW201914 3.1 Dry Shoot 20.23
BCW201815 4.2 Dry Root 2.67
BCW201084 4.2 Dry Root 2.43
BCW201815 4.2 Dry Shoot 21.10
BCW201084 4.2 Wet Root 28.90
BCW201815 4.2 Wet Root 27.27

Total Number of isolates with statistically supported positive effects on mean weight: 16 Note: There are several isolates in the first batch that display the trend of highly increased plant biomass, either in shoots or roots, but the confidence intervals overlap with those of the controls based on linear modeling of the data.

N isolates in each batch

unique(set_1$isolate)
 [1] "200488"     "201859"     "201813"     "201880"     "201236"     "201860"     "201835"     "201085"     "201885"    
[10] "201887"     "201875"     "201990"     "200726"     "201025"     "201874"     "201836"     "201879"     "201870"    
[19] "201933"     "201936"     "201840"     "200659"     "200275"     "201889"     "201162"     "201858"     "201851"    
[28] "200939"     "201910"     "200725"     "200444"     "201917"     "201895"     "201909"     "200715"     "201173"    
[37] "200661"     "201876"     "200808"     "200533"     "201818"     "201868"     "201815"     "200902"     "201899"    
[46] "201823"     "201084"     "201245"     "201824"     "200727"     "201888"     "201045"     "200556"     "201856"    
[55] "200270"     "201153"     "200496"     "control_W"  "control-WO"
LS0tCnRpdGxlOiAiSW5vY3VsYXRpbmcgUG90YXRvIFBsYW50bGV0cyB3aXRoIFRvdG9udGVwZWMgbWFpemUgYWVyaWFsIHJvb3QgbXVjaWxhZ2UgaXNvbGF0ZXMiCmF1dGhvcjogIlNoYXduIEhpZ2RvbiIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgdG9jX2Zsb2F0OiB5ZXMKICBwZGZfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwotLS0KCmBgYHtyfQpsaWJyYXJ5KGxzbWVhbnMpCmxpYnJhcnkodGlkeXZlcnNlKQoKYGBgCgojIFJlYWQgaW4gdGhlIERhdGFzZXRzCmBgYHtyfQpzZXRfMSA8LSByZWFkLmNzdigiLi9hbGxfcG90YXRvX2RhdGEvU2V0MS1UYWJsZSAxLmNzdiIsIGhlYWRlciA9IFQpCnNldF8yLjEgPC0gcmVhZC5jc3YoIi4vYWxsX3BvdGF0b19kYXRhL1NldDJfRGF5MS1UYWJsZSAxLmNzdiIsIGhlYWRlciA9IFQpIApzZXRfMi4yIDwtIHJlYWQuY3N2KCIuL2FsbF9wb3RhdG9fZGF0YS9TZXQyX0RheTItVGFibGUgMS5jc3YiLCBoZWFkZXIgPSBUKQpzZXRfMi4zIDwtIHJlYWQuY3N2KCIuL2FsbF9wb3RhdG9fZGF0YS9TZXQyX0RheTMtVGFibGUgMS5jc3YiLCBoZWFkZXIgPSBUKSAKc2V0XzIuNCA8LSByZWFkLmNzdigiLi9hbGxfcG90YXRvX2RhdGEvU2V0Ml9EYXk0LVRhYmxlIDEuY3N2IiwgaGVhZGVyID0gVCkgCnNldF8zLjEgPC0gcmVhZC5jc3YoIi4vYWxsX3BvdGF0b19kYXRhL1NldDNfRGF5MS1UYWJsZSAxLmNzdiIsIGhlYWRlciA9IFQpIApzZXRfMy4yIDwtIHJlYWQuY3N2KCIuL2FsbF9wb3RhdG9fZGF0YS9TZXQzX0RheTItVGFibGUgMS5jc3YiLCBoZWFkZXIgPSBUKSAKc2V0XzMuMyA8LSByZWFkLmNzdigiLi9hbGxfcG90YXRvX2RhdGEvU2V0M19EYXkzLVRhYmxlIDEuY3N2IiwgaGVhZGVyID0gVCkgCnNldF8zLjQgPC0gcmVhZC5jc3YoIi4vYWxsX3BvdGF0b19kYXRhL1NldDNfRGF5NC1UYWJsZSAxLmNzdiIsIGhlYWRlciA9IFQpIApzZXRfMy41IDwtIHJlYWQuY3N2KCIuL2FsbF9wb3RhdG9fZGF0YS9TZXQzX0RheTUtVGFibGUgMS5jc3YiLCBoZWFkZXIgPSBUKSAKc2V0XzQuMSA8LSByZWFkLmNzdigiLi9hbGxfcG90YXRvX2RhdGEvU2V0NF9EYXkxLVRhYmxlIDEuY3N2IiwgaGVhZGVyID0gVCkgCnNldF80LjIgPC0gcmVhZC5jc3YoIi4vYWxsX3BvdGF0b19kYXRhL1NldDRfRGF5Mi1UYWJsZSAxLmNzdiIsIGhlYWRlciA9IFQpIApzZXRfNC4zIDwtIHJlYWQuY3N2KCIuL2FsbF9wb3RhdG9fZGF0YS9TZXQ0X0RheTMtVGFibGUgMS5jc3YiLCBoZWFkZXIgPSBUKSAKCiMgY29tYmluZSBhbGwgZGF0YXNldHMKbWFzdGVyX3NldCA8LSByYmluZChzZXRfMSwgc2V0XzIuMSwgc2V0XzIuMiwgc2V0XzIuMywgc2V0XzIuNCwgc2V0XzMuMSwgc2V0XzMuMiwgc2V0XzMuMywgc2V0XzMuNCwgc2V0XzMuNSwgc2V0XzQuMSwgc2V0XzQuMiwgc2V0XzQuMykKCmBgYAoKIyMgQ3JlYXRlIGxpc3Qgb2YgaXNvbGF0ZXMKYGBge3J9CnBvdGF0b19pc29sYXRlX2xpc3QgPC0gYXNfdGliYmxlKHVuaXF1ZShtYXN0ZXJfc2V0JGlzb2xhdGUpKSAjIGdyYWIgdW5pcXVlIGlzb2xhdGUgSURzCgpuYW1lcyhwb3RhdG9faXNvbGF0ZV9saXN0KSA8LSAiSXNvbGF0ZSIgIyBjaGFuZ2UgdmFyaWFibGUgbmFtZQoKc3RyKHBvdGF0b19pc29sYXRlX2xpc3QpCgpwb3RhdG9faXNvbGF0ZV9saXN0IDwtIHBvdGF0b19pc29sYXRlX2xpc3QgJT4lCiAgbXV0YXRlX2lmKGlzLmZhY3RvciwgbmFfaWYsIHkgPSAiIikgIyBhZGQgTkEgdG8gZW1wdHkgdmFsdWVzCgpwb3RhdG9faXNvbGF0ZV9saXN0IDwtIHBvdGF0b19pc29sYXRlX2xpc3QgJT4lIAogIGZpbHRlcihncmVwbCgiMiIsIElzb2xhdGUpKSAjIHJlbW92ZSByb3dzIHdpdGhvdXQgJzInIHByZWZpeCAobm9uLWlzb2xhdGUgcm93cykKCnBvdGF0b19pc29sYXRlX2xpc3QkSXNvbGF0ZSA8LSBwYXN0ZTAoJ0JDVy0nLCBwb3RhdG9faXNvbGF0ZV9saXN0JElzb2xhdGUpICMgYWRkIEJDVy0gcHJlZml4Cgpwb3RhdG9faXNvbGF0ZV9saXN0IDwtIGFycmFuZ2UocG90YXRvX2lzb2xhdGVfbGlzdCwgSXNvbGF0ZSkgIyBhcnJhbmdlIGluIGRlc2NlbmRpbmcgb3JkZXIKCndyaXRlX2Nzdihwb3RhdG9faXNvbGF0ZV9saXN0LCAiLi9SX091dHB1dF9GaWxlcy9wb3RhdG9faXNvbGF0ZV9saXN0LmNzdiIsIGNvbF9uYW1lcyA9IFQpCgpgYGAKCgojIFN0YXRpc3RpY2FsIEFuYWx5c2lzCgojIyBFeHBlcmltZW50YWwgRGVzaWduCgoqIFBvdGF0byBwbGFudGxldHMgcHVyY2hhc2VkIGZyb20gQ2FuYWRhIGluIGJ1bGsgd2VyZSBpbmRpdmlkdWFsbHkgdHJhbnNwbGFudGVkIGludG8gMVggTVMgbWVkaWEgc2xhbnRzLgoqIE11Y2lsYWdlIElzb2xhdGVzIHdlcmUgY3VsdHVyZWQgaW4gTHVyaWEncyBCcm90aCAoTEIpIHRvIGFuIE9ENjAwIHZhbHVlIG9mIDAuNi4KKiAxMDAgwrVMIG9mIGVhY2ggaW5vY3VsdW0gd2FzIGFwcGxpZWQgdG8gYSBwbGFudGxldCB2aWFsLCB3YXMgc2VhbGVkLCBhbmQgdGhlIHZpYWxzIHdlcmUgaW5jdWJhdGVkIGF0IDI4IMK6QyBmb3IgMyB3ZWVrcy4KKiBFYWNoIGlub2N1bGF0aW9uIHdhcyBldmFsdWF0ZWQgaW4gdHJpcGxpY2F0ZS4KKiBBbGwgSXNvbGF0ZXMgdGhhdCB3ZXJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSB3aG9sZSBnZW5vbWUgc2VxdWVuY2luZyBzdHVkeSB3ZXJlIGFzc2Vzc2VkIHdpdGggdGhpcyBhc3NheS4KKiBUaGUgbnVtYmVyIG9mIGlzb2xhdGVzIHRvIGJlIHNjcmVlbmVkIGxlZCB0byB0aGUgZnVsbCBsaXN0IGJlaW5nIGFzc2Vzc2VkIGluIGJhdGNoZXM6CiAgKiBCYXRjaCAxCiAgKiBCYXRjaCAyICg0IGdyb3VwcykKICAqIEJhdGNoIDMgKDUgZ3JvdXBzKQogICogQmF0Y2ggNCAoMyBncm91cHMpCgojIyBMaW5lYXIgTW9kZWxpbmcKCkRhdGEgbWVhc3VyZW1lbnRzIHdlcmUgZml0IHRvIGEgbGluZWFyIG1vZGVsIHVzaW5nIHRoZSBgbG1gIGZ1bmN0aW9uIG9mIFIuClRoZSBub3JtYWxpdHkgb2YgdGhlIGRhdGEgd2FzIGFzc2Vzc2VkIGJ5IHZpc3VhbGl6aW5nIHBhcmFtZXRlcnMgb2YgZWFjaCBsaW5lYXIgbW9kZWwgaW4gdHdvIHdheXM6CgoqIE5vcm1hbCBRLVEgcGxvdHMgKFN0YW5kYXJkaXplZCByZXNpZHVhbHMgdnMuIFRoZW9yZXRpY2FsIFF1YW50aWxlcykKKiBTY2FsZSAtIExvY2F0aW9uIHBsb3RzIChTcXVhcmVyb290IG9mIFN0YW5kYXJkIHJlc2lkdWFscyB2cy4gZml0dGVkIHZhbHVlcykKCiMjIEFub3ZhCgpPbmUgd2F5IGFuYWx5c2lzIG9mIHZhcmlhbmNlIHdhcyBhcHBsaWVkIHRvIGVhY2ggbGluZWFyIG1vZGVsIGFzIGEgcHJlbGltaW5hcnkgYXNzZXNzbWVudCBvZiBlYWNoIGlub2N1bGF0aW9uIGJhdGNoLgoKIyMgVGhlIExTTWVhbnMgUGFja2FnZQoKVGhlIExTTWVhbnMgUGFja2FnZSB3YXMgdXNlZCB0byBjYWxjdWxhdGUgbWVhbiBlc3RpbWF0ZXMsIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLCBhbmQgY29uZHVjdCBtdWx0aXBsZSB0LXRlc3RzLiBDb3JyZWN0aW9uIGZvciBtdWx0aXBsZSB0ZXN0aW5nIHdhcyBpbXBsZW1lbnRlZCB1c2luZyBlaXRoZXIgdGhlIER1bm5ldHQgbWV0aG9kLCBvciB0aGUgVHVrZXkgbWV0aG9kIChkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgY29tcGFyaXNvbnMpLCBhbmQgdGhlIGFkanVzdGVkIHAtdmFsdWVzIGFyZSBwcmVzZW50ZWQgaW4gdGhlIG91dHB1dHMuCgojIyBDb21wYWN0IExldHRlciBEaXNwbGF5CgpDb21wYWN0IExldHRlciBEaXNwbGF5IGlzIGEgZnVuY3Rpb24gaW4gUiB0aGF0IGFzc2lnbnMgYSBjb21tb24gbGFiZWwgdG8gZWFjaCB0cmVhdG1lbnQgZ3JvdXAgYmFzZWQgb24gd2hldGhlciBvciBub3QgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIG9mIHRoZSBtZWFuIGVzdGltYXRpb25zIGZyb20gTFNNZWFucyBvdmVybGFwIHdpdGggdGhvc2Ugb2Ygb3RoZXIgdHJlYXRtZW50IGdyb3Vwcy4gSWYgdHdvIHRyZWF0bWVudCBncm91cHMgaGF2ZSBub24tb3ZlcmxhcHBpbmcgY29uZmlkZW5jZSBpbnRlcnZhbHMgYXNzb2NpYXRlZCB3aXRoIHRoZWlyIG1lYW4gZXN0aW1hdGVzLCB0aGV5IGFyZSBub3QgY2xhc3NpZmllZCB3aXRoaW4gdGhlIHNhbWUgZ3JvdXAuIFRoaXMgYWxsb3dzIGhpZ2hlciBzZWN1cml0eSBpbiBhc3NlcnRpbmcgdGhhdCB0aGUgbWVhbiBlc3RpbWF0ZXMgYXJlIHRydWx5IGRpZmZlcmVudCBhdCB0aGUgc3BlY2lmaWVkIGNvbmZpZGVuY2UgbGV2ZWwuICAKCiMjIEJhdGNoIDEKCmBgYHtyfQojIGFuYWx5emUgc2V0IDEgZGF0YQpzdHIoc2V0XzEpCgojc3Vic2V0IGJ5IHNhbXBsZSB0eXBlCgpzZXRfMV9EUiA8LSBmaWx0ZXIoc2V0XzEsIHNhbXBsZSA9PSAiRFIiKQpzZXRfMV9EUyA8LSBmaWx0ZXIoc2V0XzEsIHNhbXBsZSA9PSAiRFMiKQpzZXRfMV9XUiA8LSBmaWx0ZXIoc2V0XzEsIHNhbXBsZSA9PSAiV1IiKQpzZXRfMV9XUyA8LSBmaWx0ZXIoc2V0XzEsIHNhbXBsZSA9PSAiV1MiKQpgYGAKCioqRXhwZXJpbWVudGFsIERlc2lnbiBUYWJsZSoqCgp8IFN0cnVjdHVyZSB8IEZhY3RvciB8IFR5cGUgfCAjIGxldmVscyB8CnwtLS0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS18LS0tLS0tLS0tLXwKfCBUcmVhdG1lbnQgfCBJc29sYXRlIHwgUXVhbGl0YXRpdmUgfCA1OSB8CnwgRGVzaWduICAgIHwgTVMgTWVkaWEgU2xhbnRzIHwgRXhwZXJpbWVudGFsIFVuaXQgfCAxNzcgfAp8IFJlc3BvbnNlICB8IFBsYW50IFRpc3N1ZSBXZWlnaHQgfCBPYnNlcnZhdGlvbmFsIFVuaXQgfCA3MDggfAp8UmVzcG9uc2UgfCBEcnkgUm9vdCBXZWlnaHQgKERSKSB8IFZhcmlhYmxlIHwgMTc3IHwgCnwgUmVzcG9uc2UgfCBEcnkgU2hvb3QgV2VpZ2h0IChEUykgfCBWYXJpYWJsZSB8IDE3NyB8CnwgUmVzcG9uc2UgfCBXZXQgUm9vdCBXZWlnaHQgKFdSKSB8IFZhcmlhYmxlIHwgMTc3IHwgCnwgUmVzcG9uc2UgfCBXZXQgU2hvb3QgV2VpZ2h0IChXUykgfCBWYXJpYWJsZSB8IDE3NyB8CgoqIDU3IElzb2xhdGVzCiogMiBjb250cm9scwogICogY29udHJvbF9XIC0gMTAwIMK1TCBvZiBzYWxpbmUgc29sdXRpb24KICAqIGNvbnRyb2wtV08gLSBubyBhZGRlZCBzb2x1dGlvbgoKIyMjIDEuMS4gRHJ5IFJvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiBkcnkgcm9vdCBkYXRhCmxtX3NldF8xX0RSIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF8xX0RSKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzFfRFIsIHdoaWNoID0gYygyLDMpKQpwYXIob3ApCmBgYAoKIyMjIyAxLjEuIC0gQW5vdmEKCmBgYHtyfQphbm92YShsbV9zZXRfMV9EUikKYGBgCgojIyMjIDEuMS4gLSBMU01lYW5zIChDb250cm9sX1cpIC0gRHVubmV0dAoKYGBge3J9CmxzbV9zMS5kdW4uRFIgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF8xX0RSLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTQ1KSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3MxLmR1bi5EUiwgIi4vbHNtZWFuc19zdW1tYXJ5X3RhYmxlcy9sc21fczEuZHVuLkRSLmNzdiIpCmBgYAoKIyMjIyAxLjEuIC0gTFNNZWFucyAoQ29udHJvbC1XTykgLSBEdW5uZXR0CgpgYGB7cn0Kc3VtbWFyeShsc21lYW5zKGxtX3NldF8xX0RSLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTQ2KSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQpgYGAKCiMjIyMgMS4xIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzFfRFIsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF8xX0RSLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBEcnkgUm9vdCBXZWlnaHQiLCB4bGFiID0gIk1lYW4gV2VpZ2h0IChtZykiLCB5bGFiID0gIklzb2xhdGUgSUQiKQpgYGAKCgojIyMjIDEuMS4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2xfVwoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBSb290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbCAoQ29udHJvbF9XKS4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8xX0RSLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj00NSkkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIERyeSBSb290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbF9XIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKIyMjIyAxLjEuIC0gQ0xEIC0gTWVhbiBFc3RpbWF0ZSBEaWZmZXJlbmNlcyB0byBDb250cm9sLVdPCgpDb21wYWN0IExldHRlciBEaXNwbGF5IG9mIGVzdGltYXRlcyBmb3IgRHJ5IFJvb3QgTWVhbiB3ZWlnaHQgKG1nKSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBsYW50cyB0aGF0IHdlcmUgaW5vY3VsYXRlZCB3aXRoIGEgbXVjaWxhZ2UgaXNvbGF0ZXMgYW5kIHRoZSBub24taW5vY3VsYXRlZCBjb250cm9sIChDb250cm9sLVdPKS4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8xX0RSLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj00NikkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIERyeSBSb290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbC1XTyIsIHhsYWIgPSAiRGlmZmVyZW5jZSBvZiBNZWFuIEVzdGltYXRlcyAobWcpIiwgeWxhYiA9ICJDb250cmFzdHMiKQpgYGAKCj4gQmFzZWQgb24gdGhlIG1lYW5zIGNvbXBhcmlzb24gYW5hbHlzZXMgYWJvdmUgb2YgdGhlIGRyeSByb290IHdlaWdodCBtZWFzdXJlbWVudHMgZm9yIHBsYW50cyBvZiBpbm9jdWxhdGlvbiBiYXRjaCAxLCB0aGVyZSBhcHBlYXJzIHRvIGJlIG9uZSBpc29sYXRlLCBCQ1cyMDE4NTgsIHRoYXQgaGFzIGEgc2lnbmlmaWNhbnQgZWZmZWN0IG9uIHRoZSBtZWFuIGRyeSByb290IHdlaWdodC4gVGhpcyBpcyB0aGUgbW9zdCBhcHBhcmVudCB3aGVuIGNvbXBhcmluZyB0byBjb250cm9sX1csIHdoZXJlIHRoZSBjb25maWRlbmNlIGludGVydmFscyBmb3IgdGhlc2UgbWVhbiB3ZWlnaHQgZXN0aW1hdGVzIGRvIG5vdCBvdmVybGFwIFtzZWU6IDEuMSAtIENMRCAtIENvbnRyb2xfVyAoUGFpcndpc2UgYnkgaXNvbGF0ZSldLgoKIyMjIDEuMi4gRHJ5IFNob290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2YgZHJ5IHNob290IGRhdGEKbG1fc2V0XzFfRFMgPC0gbG0obWcgfiAxICsgaXNvbGF0ZSwgc2V0XzFfRFMpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMV9EUywgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDEuMi4gLSBBbm92YQoKYGBge3J9CmFub3ZhKGxtX3NldF8xX0RTKQpgYGAKCiMjIyMgMS4yLiAtIExTTWVhbnMgKENvbnRyb2xfVykgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3MxLmR1bi5EUyA8LSBzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzFfRFMsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9NDUpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczEuZHVuLkRTLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zMS5kdW4uRFMuY3N2IikKYGBgCgojIyMjIDEuMi4gLSBMU01lYW5zIChDb250cm9sLVdPKSAtIER1bm5ldHQKCmBgYHtyfQpzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzFfRFMsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9NDYpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCmBgYAoKIyMjIyAxLjIgLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfMV9EUywgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzFfRFMsIH5pc29sYXRlKSwgYWxwaGE9MC4xKSwgbWFpbj0iQWxsIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBNZWFuIERyeSBTaG9vdCBXZWlnaHQiLCB4bGFiID0gIk1lYW4gV2VpZ2h0IChtZykiLCB5bGFiID0gIklzb2xhdGUgSUQiKQpgYGAKCgojIyMjIDEuMi4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2xfVwoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBTaG9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wgKENvbnRyb2xfVykuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMV9EUywgdHJ0LnZzLmN0cmx+aXNvbGF0ZSxyZWY9NDUpJGNvbnRyYXN0cywgYWxwaGE9MC4xKSwgbWFpbj0iTWVhbiBEcnkgU2hvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sX1ciLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgojIyMjIDEuMi4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wtV08KCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBEcnkgU2hvb3QgTWVhbiB3ZWlnaHQgKG1nKSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBsYW50cyB0aGF0IHdlcmUgaW5vY3VsYXRlZCB3aXRoIGEgbXVjaWxhZ2UgaXNvbGF0ZXMgYW5kIHRoZSBub24taW5vY3VsYXRlZCBjb250cm9sIChDb250cm9sLVdPKS4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8xX0RTLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj00NikkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIERyeSBTaG9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wtV08iLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IEJDVzIwMDcyNyBoYXMgYSBtZWFuIGVzdGltYXRlIHdpdGggbm9uLW92ZXJsYXBpbmcgQ29uZmlkZW5jZSBpbnRlcnZhbHMgdG8gdGhvc2Ugb2YgdGhlIGNvbnRyb2xfVyBlc3RpbWF0ZS4KCiMjIyAxLjMuIFdldCBSb290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2YgV2V0IFJvb3QgZGF0YQpsbV9zZXRfMV9XUiA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfMV9XUikKI29wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMV9XUiwgd2hpY2ggPSBjKDIsMykpCiNwYXIob3ApCmBgYAoKIyMjIyAxLjMuIC0gQW5vdmEKCmBgYHtyfQphbm92YShsbV9zZXRfMV9XUikKc3VtbWFyeShsbV9zZXRfMV9XUiwgaW5mZXI9YyhULFQpKQpgYGAKCiMjIyMgMS4zLiAtIExTTWVhbnMgKENvbnRyb2xfVykKCmBgYHtyfQpsc21fczEuZHVuLldSIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfMV9XUiwgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj00NikkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKd3JpdGUuY3N2KGxzbV9zMS5kdW4uV1IsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3MxLmR1bi5XUi5jc3YiKQpgYGAKCiMjIyMgMS4zLiAtIExTTWVhbnMgKENvbnRyb2wtV08pCgpgYGB7cn0Kc3VtbWFyeShsc21lYW5zKGxtX3NldF8xX1dSLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTQ2KSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQpgYGAKCiMjIyMgMS4zIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzFfV1IsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF8xX1dSLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBXZXQgUm9vdCBXZWlnaHQiLCB4bGFiID0gIk1lYW4gV2VpZ2h0IChtZykiLCB5bGFiID0gIklzb2xhdGUgSUQiKQpgYGAKCgojIyMjIDEuMy4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2xfVwoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIFdldCBSb290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbCAoQ29udHJvbF9XKS4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8xX1dSLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj00NSkkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIFdldCBSb290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbF9XIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKIyMjIyAxLjMuIC0gQ0xEIC0gTWVhbiBFc3RpbWF0ZSBEaWZmZXJlbmNlcyB0byBDb250cm9sLVdPCgpDb21wYWN0IExldHRlciBEaXNwbGF5IG9mIGVzdGltYXRlcyBmb3IgV2V0IFJvb3QgTWVhbiB3ZWlnaHQgKG1nKSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBsYW50cyB0aGF0IHdlcmUgaW5vY3VsYXRlZCB3aXRoIGEgbXVjaWxhZ2UgaXNvbGF0ZXMgYW5kIHRoZSBub24taW5vY3VsYXRlZCBjb250cm9sIChDb250cm9sLVdPKS4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8xX1dSLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj00NikkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIFdldCBSb290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbC1XTyIsIHhsYWIgPSAiRGlmZmVyZW5jZSBvZiBNZWFuIEVzdGltYXRlcyAobWcpIiwgeWxhYiA9ICJDb250cmFzdHMiKQpgYGAKCj4gUmVnYXJkaW5nIHdldCByb290IG1hc3MgaW4gbWlsbGlncmFtcywgaXNvbGF0ZSBCQ1cyMDA1NTYgZG9lcyBub3QgZXhoaWJpdCBhIG1lYW4gZXN0aW1hdGUgd2l0aCBhIENJIHRoYXQgb3ZlcmxhcHMgd2l0aCB0aG9zZSBvZiBtZWFuIGVzdGltYXRlcyBmcm9tIGJvdGggY29udHJvbHMuIFRoaXMgaW1wbGllcyB0aGUgZWZmZWN0IGlzIHNpZ25pZmljYW50IGF0IHRoZSBhbHBoYSA9IDAuMSBsZXZlbC4KCiMjIyAxLjQuIFdldCBTaG9vdCBXZWlnaHQKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2YgV2V0IHNob290IGRhdGEKbG1fc2V0XzFfV1MgPC0gbG0obWcgfiAxICsgaXNvbGF0ZSwgc2V0XzFfV1MpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMV9XUywgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDEuNC4gLSBBbm92YQoKYGBge3J9CmFub3ZhKGxtX3NldF8xX1dTKQpzdW1tYXJ5KGxtX3NldF8xX1dTKQpgYGAKCiMjIyMgMS40LiAtIExTTWVhbnMgKENvbnRyb2xfVykKCmBgYHtyfQpsc21fczEuZHVuLldTIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfMV9XUywgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj00NikkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKd3JpdGUuY3N2KGxzbV9zMS5kdW4uV1MsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3MxLmR1bi5XUy5jc3YiKQpgYGAKCiMjIyMgMS40LiAtIExTTWVhbnMgKENvbnRyb2wtV08pCgpgYGB7cn0Kc3VtbWFyeShsc21lYW5zKGxtX3NldF8xX1dTLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTQ3KSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQpgYGAKCiMjIyMgMS40IC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzFfV1MsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF8xX1dTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBXZXQgU2hvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDEuNC4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2xfVwoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIFdldCBTaG9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wgKENvbnRyb2xfVykuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMV9XUywgdHJ0LnZzLmN0cmx+aXNvbGF0ZSxyZWY9NDUpJGNvbnRyYXN0cywgYWxwaGE9MC4xKSwgbWFpbj0iTWVhbiBXZXQgU2hvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sX1ciLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgojIyMjIDEuNC4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wtV08KCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBXZXQgU2hvb3QgTWVhbiB3ZWlnaHQgKG1nKSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBsYW50cyB0aGF0IHdlcmUgaW5vY3VsYXRlZCB3aXRoIGEgbXVjaWxhZ2UgaXNvbGF0ZXMgYW5kIHRoZSBub24taW5vY3VsYXRlZCBjb250cm9sIChDb250cm9sLVdPKS4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8xX1dTLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj00NikkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIFdldCBTaG9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wtV08iLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IE5vbmUgb2YgdGhlIG1lYW4gZXN0aW1hdGVzIGZvciBpbm9jdWxhdGVkIGlzb2xhdGVzIGhhdmUgbm9uLW92ZXJsYXBwaW5nIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIHdpdGggdGhvc2Ugb2Ygbm9uLWlub2N1bGF0ZWQgY29udHJvbHMuCgojIyBCYXRjaCAyLjEKCmBgYHtyfQojIGFuYWx5emUgc2V0IDIuMSBkYXRhCnN0cihzZXRfMi4xKQoKI3N1YnNldCBieSBzYW1wbGUgdHlwZQoKc2V0XzIuMV9EUiA8LSBmaWx0ZXIoc2V0XzIuMSwgc2FtcGxlID09ICJEUiIpCnNldF8yLjFfRFMgPC0gZmlsdGVyKHNldF8yLjEsIHNhbXBsZSA9PSAiRFMiKQpzZXRfMi4xX1dSIDwtIGZpbHRlcihzZXRfMi4xLCBzYW1wbGUgPT0gIldSIikKc2V0XzIuMV9XUyA8LSBmaWx0ZXIoc2V0XzIuMSwgc2FtcGxlID09ICJXUyIpCgpgYGAKCioqRXhwZXJpbWVudGFsIERlc2lnbiBUYWJsZSoqCgp8IFN0cnVjdHVyZSB8IEZhY3RvciB8IFR5cGUgfCAjIGxldmVscyB8CnwtLS0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS18LS0tLS0tLS0tLXwKfCBUcmVhdG1lbnQgfCBJc29sYXRlIHwgUXVhbGl0YXRpdmUgfCAzMyB8CnwgRGVzaWduICAgIHwgTVMgTWVkaWEgU2xhbnRzIHwgRXhwZXJpbWVudGFsIFVuaXQgfCA5OSB8CnwgUmVzcG9uc2UgIHwgUGxhbnQgVGlzc3VlIFdlaWdodCB8IE9ic2VydmF0aW9uYWwgVW5pdCB8IDM5NiB8CnxSZXNwb25zZSB8IERyeSBSb290IFdlaWdodCAoRFIpIHwgVmFyaWFibGUgfCA5OSB8IAp8IFJlc3BvbnNlIHwgRHJ5IFNob290IFdlaWdodCAoRFMpIHwgVmFyaWFibGUgfCA5OSB8CnwgUmVzcG9uc2UgfCBXZXQgUm9vdCBXZWlnaHQgKFdSKSB8IFZhcmlhYmxlIHwgOTkgfCAKfCBSZXNwb25zZSB8IFdldCBTaG9vdCBXZWlnaHQgKFdTKSB8IFZhcmlhYmxlIHwgOTkgfAoKCiogRm91ciBzZXRzIG9mIGlub2N1bGF0aW9ucyB3ZXJlIHNldHVwIGluZGVwZW5kZW50bHksIGVhY2ggd2l0aCBpbmRlcGVuZGVudCBjb250cm9scy4KKiBFYWNoIHNldCBvZiBpc29sYXRlcyB3YXMgdHJlYXRlZCBhcyBhbiBpbmRlcGVuZGVudCBleHBlcmltZW50IGZvciB0aGUgYW5hbHlzaXMuCgojIyMgMi4xLjEuIERyeSBSb290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2YgZHJ5IHJvb3QgZGF0YQpsbV9zZXRfMi4xX0RSIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF8yLjFfRFIpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMi4xX0RSLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgMi4xLjEuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZSAtIGJ1dCB0aGUgZGF0YSBpc24ndCBub3JtYWwKYW5vdmEobG1fc2V0XzIuMV9EUikKYGBgCgojIyMjIDIuMS4xLiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3MyLjEuZHVuLkRSIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfMi4xX0RSLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTMxKSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3MyLjEuZHVuLkRSLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zMi4xLmR1bi5EUi5jc3YiKQpgYGAKCiMjIyMgMi4xLjEuIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzIuMV9EUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzIuMV9EUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpLCBtYWluPSJBbGwgcGFpcndpc2UgY29tcGFyaXNvbnMgZm9yIE1lYW4gRHJ5IFJvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDIuMS4xLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBSb290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbC4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8yLjFfRFIsIHRydC52cy5jdHJsfmlzb2xhdGUscmVmPTMxKSRjb250cmFzdHMsIGFscGhhPTAuMSksIG1haW49Ik1lYW4gRHJ5IFJvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKPiBEcnkgcm9vdCBkYXRhIHN1Z2dlc3RzIHRoYXQgaXNvbGF0ZSBCQ1cyMDE4ODQgc2lnbmlmaWNhbnRseSBpbmNyZWFzZXMgcm9vdCB3ZWlnaHQgb2YgdGhlIHBvdGF0byBwbGFudGxldHMuIEkgYW0gc3VzcGVjaW91cyBvZiB0aGlzIHJlc3VsdCBhbmQgbmVlZCB0byBjaGVjayB0aGUgbWFudWFsbHkgcmVjb3JkZWQgZGF0YXNoZWV0cy4gVGhlIGRhdGEgZW50ZXJlZCBmb3IgdGhpcyBpc29sYXRlIGNvdWxkIGhhdmUgcmVjZWl2ZWQgYSB0eXBvIGR1cmluZyBkYXRhIGVudHJ5IChsaWtlbHkgYmFzZWQgb24gdGhlIHRyaXBsaWNhdGUgc2V0IGVudGVyZWQ6IDMuNiwgODcuMywgMS43KS4KCiMjIyAyLjEuMi4gRHJ5IFNob290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2YgZHJ5IHNob290IGRhdGEKbG1fc2V0XzIuMV9EUyA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfMi4xX0RTKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzIuMV9EUywgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDIuMS4yLiAtIEFub3ZhCgpgYGB7cn0KIyBhc3Nlc3MgdmFyaWFuY2UKYW5vdmEobG1fc2V0XzIuMV9EUykKYGBgCgojIyMjIDIuMS4yLiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3MyLjEuZHVuLkRTIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfMi4xX0RTLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTMxKSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3MyLjEuZHVuLkRTLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zMi4xLmR1bi5EUy5jc3YiKQpgYGAKCiMjIyMgMi4xLjIgLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfMi4xX0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMi4xX0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBEcnkgU2hvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDIuMS4yLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBTaG9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMi4xX0RTLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0zMSkkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIERyeSBTaG9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGNvbnRyb2wgYW5kIEJDVzIwMDgxMCBpcyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGF0IGFuIGFscGhhIGxldmVsIG9mIDAuMS4KCiMjIyAyLjEuMy4gV2V0IFJvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiB3ZXQgcm9vdCBkYXRhCmxtX3NldF8yLjFfV1IgPC0gbG0obWcgfiAxICsgaXNvbGF0ZSwgc2V0XzIuMV9XUikKb3AgPSBwYXIobWZyb3c9YygxLDIpKQpwbG90KGxtX3NldF8yLjFfV1IsIHdoaWNoID0gYygyLDMpKQpwYXIob3ApCmBgYAoKIyMjIyAyLjEuMy4gLSBBbm92YQoKYGBge3J9CgojYXNzZXNzIHZhcmlhbmNlCmFub3ZhKGxtX3NldF8yLjFfV1IpCmBgYAoKIyMjIyAyLjEuMy4gLSBMU01lYW5zIC0gRHVubmV0dAoKYGBge3J9CmxzbV9zMi4xLmR1bi5XUiA8LSBzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzIuMV9XUiwgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj0zMSkkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKd3JpdGUuY3N2KGxzbV9zMi4xLmR1bi5XUiwgIi4vbHNtZWFuc19zdW1tYXJ5X3RhYmxlcy9sc21fczIuMS5kdW4uV1IuY3N2IikKYGBgCgojIyMjIDIuMS4zLiAtIENMRCAtIChQYWlyd2lzZSBieSBpc29sYXRlKQoKYGBge3J9CkNMRChsc21lYW5zKGxtX3NldF8yLjFfV1IsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF8yLjFfV1IsIH5pc29sYXRlKSwgYWxwaGE9MC4xKSwgbWFpbj0iQWxsIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBNZWFuIFdldCBSb290IFdlaWdodCIsIHhsYWIgPSAiTWVhbiBXZWlnaHQgKG1nKSIsIHlsYWIgPSAiSXNvbGF0ZSBJRCIpCmBgYAoKIyMjIyAyLjEuMy4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wKCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBXZXQgUm9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMi4xX1dSLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0zMSkkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIFdldCBSb290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbCIsIHhsYWIgPSAiRGlmZmVyZW5jZSBvZiBNZWFuIEVzdGltYXRlcyAobWcpIiwgeWxhYiA9ICJDb250cmFzdHMiKQpgYGAKCj4gQmFzZWQgb24gdGhlIG1vZGVsaW5nIGFuZCB0aGUgcGxvdCBvZiBtZWFuIHdldCByb290IHdlaWdodHMsIHRoZSBjbHVzdGVyIG9mIGZvdXIgaXNvbGF0ZXMgd2l0aCBtZWFuIHdldCByb290IGRpZmZlcmVuY2VzIGFyb3VuZCA2MCBtZyBhcHBlYXIgdG8gYmUgc3Ryb25nIGNhbmRpZGF0ZXMuIElzb2xhdGVzIEJDVzIwMTg3MywgQkNXMjAwODEwLCBCQ1cyMDE4MDksIEJDVzIwMTg2NC4KCiMjIyAyLjEuNC4gV2V0IFNob290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2Ygd2V0IHNob290IGRhdGEKbG1fc2V0XzIuMV9XUyA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfMi4xX1dTKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzIuMV9XUywgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDIuMS40LiAtIEFub3ZhCgpgYGB7cn0KCiMgYXNzZXNzIHZhcmlhbmNlCmFub3ZhKGxtX3NldF8yLjFfV1MpCmBgYAoKIyMjIyAyLjEuNC4gLSBMU01lYW5zIC0gRHVubmV0dAoKYGBge3J9CmxzbV9zMi4xLmR1bi5XUyA8LSBzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzIuMV9XUywgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj0zMSkkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKd3JpdGUuY3N2KGxzbV9zMi4xLmR1bi5XUywgIi4vbHNtZWFuc19zdW1tYXJ5X3RhYmxlcy9sc21fczIuMS5kdW4uV1MuY3N2IikKYGBgCgojIyMjIDIuMS40LiAtIENMRCAtIChQYWlyd2lzZSBieSBpc29sYXRlKQoKYGBge3J9CkNMRChsc21lYW5zKGxtX3NldF8yLjFfRFMsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF8yLjFfV1MsIH5pc29sYXRlKSwgYWxwaGE9MC4xKSwgbWFpbj0iQWxsIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBNZWFuIERyeSBTaG9vdCBXZWlnaHQiLCB4bGFiID0gIk1lYW4gV2VpZ2h0IChtZykiLCB5bGFiID0gIklzb2xhdGUgSUQiKQpgYGAKCiMjIyMgMi4xLjQuIC0gQ0xEIC0gTWVhbiBFc3RpbWF0ZSBEaWZmZXJlbmNlcyB0byBDb250cm9sCgpDb21wYWN0IExldHRlciBEaXNwbGF5IG9mIGVzdGltYXRlcyBmb3IgRHJ5IFNob290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbC4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8yLjFfRFMsIHRydC52cy5jdHJsfmlzb2xhdGUscmVmPTMxKSRjb250cmFzdHMsIGFscGhhPTAuMSksIG1haW49Ik1lYW4gRHJ5IFNob290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbCIsIHhsYWIgPSAiRGlmZmVyZW5jZSBvZiBNZWFuIEVzdGltYXRlcyAobWcpIiwgeWxhYiA9ICJDb250cmFzdHMiKQpgYGAKCj4gVGhlIG1lYW4gd2V0IHNob290IHdlaWdodCBmb3IgQkNXMjAwODEwIGlzIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IGZyb20gdGhhdCBvZiB0aGUgY29udHJvbCBhdCBhbiBhbHBoYSBsZXZlbCBvZiAwLjEKCiMjIEJhdGNoIDIuMgoKYGBge3J9CiMgYW5hbHl6ZSBzZXQgMi4yIGRhdGEKc3RyKHNldF8yLjIpCgojc3Vic2V0IGJ5IHNhbXBsZSB0eXBlCgpzZXRfMi4yX0RSIDwtIGZpbHRlcihzZXRfMi4yLCBzYW1wbGUgPT0gIkRSIikKc2V0XzIuMl9EUyA8LSBmaWx0ZXIoc2V0XzIuMiwgc2FtcGxlID09ICJEUyIpCnNldF8yLjJfV1IgPC0gZmlsdGVyKHNldF8yLjIsIHNhbXBsZSA9PSAiV1IiKQpzZXRfMi4yX1dTIDwtIGZpbHRlcihzZXRfMi4yLCBzYW1wbGUgPT0gIldTIikKYGBgCgoqKkV4cGVyaW1lbnRhbCBEZXNpZ24gVGFibGUqKgoKfCBTdHJ1Y3R1cmUgfCBGYWN0b3IgfCBUeXBlIHwgIyBsZXZlbHMgfAp8LS0tLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tfC0tLS0tLS0tLS18CnwgVHJlYXRtZW50IHwgSXNvbGF0ZSB8IFF1YWxpdGF0aXZlIHwgMzMgfAp8IERlc2lnbiAgICB8IE1TIE1lZGlhIFNsYW50cyB8IEV4cGVyaW1lbnRhbCBVbml0IHwgOTkgfAp8IFJlc3BvbnNlICB8IFBsYW50IFRpc3N1ZSBXZWlnaHQgfCBPYnNlcnZhdGlvbmFsIFVuaXQgfCAzOTYgfAp8UmVzcG9uc2UgfCBEcnkgUm9vdCBXZWlnaHQgKERSKSB8IFZhcmlhYmxlIHwgOTkgfCAKfCBSZXNwb25zZSB8IERyeSBTaG9vdCBXZWlnaHQgKERTKSB8IFZhcmlhYmxlIHwgOTkgfAp8IFJlc3BvbnNlIHwgV2V0IFJvb3QgV2VpZ2h0IChXUikgfCBWYXJpYWJsZSB8IDk5IHwgCnwgUmVzcG9uc2UgfCBXZXQgU2hvb3QgV2VpZ2h0IChXUykgfCBWYXJpYWJsZSB8IDk5IHwKCiMjIyAyLjIuMS4gRHJ5IFJvb3QgV2VpZ2h0IAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2YgZHJ5IHJvb3QgZGF0YQpsbV9zZXRfMi4yX0RSIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF8yLjJfRFIpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMi4yX0RSLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgMi4yLjEuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZSAtIGJ1dCB0aGUgZGF0YSBpc24ndCBub3JtYWwKYW5vdmEobG1fc2V0XzIuMl9EUikKYGBgCgojIyMjIDIuMi4xLiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3MyLjIuZHVuLkRSIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfMi4yX0RSLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTMyKSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3MyLjIuZHVuLkRSLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zMi4yLmR1bi5EUi5jc3YiKQpgYGAKCiMjIyMgMi4yLjEuIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzIuMl9EUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzIuMl9EUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpLCBtYWluPSJBbGwgcGFpcndpc2UgY29tcGFyaXNvbnMgZm9yIE1lYW4gRHJ5IFJvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDIuMi4xLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBSb290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbC4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8yLjJfRFIsIHRydC52cy5jdHJsfmlzb2xhdGUscmVmPTMyKSRjb250cmFzdHMsIGFscGhhPTAuMSksIG1haW49Ik1lYW4gRHJ5IFJvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKPiBCQ1cyMDE4NDkgaGFzIGEgZHJ5IHJvb3Qgd2VpZ2h0IHRoYXQgaXMgc2lnbmlmaWNhbnRseSBoaWdoZXIgdGhhbiB0aGUgY29udHJvbC4KCiMjIyAyLjIuMi4gRHJ5IFNob290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2YgZHJ5IHNob290IGRhdGEKbG1fc2V0XzIuMl9EUyA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfMi4yX0RTKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzIuMl9EUywgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDIuMi4yLiAtIEFub3ZhCgpgYGB7cn0KIyBhc3Nlc3MgdmFyaWFuY2UKYW5vdmEobG1fc2V0XzIuMl9EUykKYGBgCgojIyMjIDIuMi4yLiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3MyLjIuZHVuLkRTIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfMi4yX0RTLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTMyKSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3MyLjIuZHVuLkRTLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zMi4yLmR1bi5EUy5jc3YiKQpgYGAKCiMjIyMgMi4yLjIuIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzIuMl9EUywgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzIuMl9EUywgfmlzb2xhdGUpLCBhbHBoYT0wLjEpLCBtYWluPSJBbGwgcGFpcndpc2UgY29tcGFyaXNvbnMgZm9yIE1lYW4gRHJ5IFNob290IFdlaWdodCIsIHhsYWIgPSAiTWVhbiBXZWlnaHQgKG1nKSIsIHlsYWIgPSAiSXNvbGF0ZSBJRCIpCmBgYAoKIyMjIyAyLjIuMi4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wKCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBEcnkgU2hvb3QgTWVhbiB3ZWlnaHQgKG1nKSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBsYW50cyB0aGF0IHdlcmUgaW5vY3VsYXRlZCB3aXRoIGEgbXVjaWxhZ2UgaXNvbGF0ZXMgYW5kIHRoZSBub24taW5vY3VsYXRlZCBjb250cm9sLgoKYGBge3J9CnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzIuMl9EUywgdHJ0LnZzLmN0cmx+aXNvbGF0ZSxyZWY9MzIpJGNvbnRyYXN0cywgYWxwaGE9MC4xKSwgbWFpbj0iTWVhbiBEcnkgU2hvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKPiBCQ1cyMDE4NDkgYWxzbyBoYXMgYSBtZWFuIGRyeSBzaG9vdCB3ZWlnaHQgdGhhdCBpcyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGZyb20gdGhhdCBvZiB0aGUgY29udHJvbCBhdCBhbiBhbHBoYSBsZXZlbCBvZiAwLjEuCgojIyMgMi4yLjMuIFdldCBSb290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2Ygd2V0IHJvb3QgZGF0YQpsbV9zZXRfMi4yX1dSIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF8yLjJfV1IpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMi4yX1dSLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgMi4yLjMuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZQphbm92YShsbV9zZXRfMi4yX1dSKQpgYGAKCiMjIyMgMi4yLjMuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpsc21fczIuMi5kdW4uV1IgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF8yLjJfV1IsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9MzIpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczIuMi5kdW4uV1IsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3MyLjIuZHVuLldSLmNzdiIpCmBgYAoKIyMjIyAyLjIuMy4gLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfMi4yX1dSLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMi4yX1dSLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBXZXQgUm9vdCBXZWlnaHQiLCB4bGFiID0gIk1lYW4gV2VpZ2h0IChtZykiLCB5bGFiID0gIklzb2xhdGUgSUQiKQpgYGAKCiMjIyMgMi4yLjMuIC0gQ0xEIC0gTWVhbiBFc3RpbWF0ZSBEaWZmZXJlbmNlcyB0byBDb250cm9sCgpDb21wYWN0IExldHRlciBEaXNwbGF5IG9mIGVzdGltYXRlcyBmb3IgV2V0IFJvb3QgTWVhbiB3ZWlnaHQgKG1nKSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBsYW50cyB0aGF0IHdlcmUgaW5vY3VsYXRlZCB3aXRoIGEgbXVjaWxhZ2UgaXNvbGF0ZXMgYW5kIHRoZSBub24taW5vY3VsYXRlZCBjb250cm9sLgoKYGBge3J9CnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzIuMl9XUiwgdHJ0LnZzLmN0cmx+aXNvbGF0ZSxyZWY9MzEpJGNvbnRyYXN0cywgYWxwaGE9MC4xKSwgbWFpbj0iTWVhbiBXZXQgUm9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IE5vbmUgb2YgdGhlIGlzb2xhdGVzIGhhdmUgbm9uLW92ZXJsYXBwaW5nIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGZvciB0aGVpciB3ZXQgcm9vdCB3ZWlnaHQgbWVhbiBlc2ltYXRlcy4KCiMjIyAyLjIuNC4gV2V0IFNob290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2Ygd2V0IHNob290IGRhdGEKbG1fc2V0XzIuMl9XUyA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfMi4yX1dTKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzIuMl9XUywgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDIuMi40LiAtIEFub3ZhCgpgYGB7cn0KIyBhc3Nlc3MgdmFyaWFuY2UKYW5vdmEobG1fc2V0XzIuMl9XUykKYGBgCgojIyMjIDIuMi40LiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3MyLjIuZHVuLldTIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfMi4yX1dTLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTMyKSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3MyLjIuZHVuLldTLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zMi4yLmR1bi5XUy5jc3YiKQpgYGAKCiMjIyMgMi4yLjQuIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzIuMl9XUywgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzIuMl9XUywgfmlzb2xhdGUpLCBhbHBoYT0wLjEpLCBtYWluPSJBbGwgcGFpcndpc2UgY29tcGFyaXNvbnMgZm9yIE1lYW4gV2V0IFNob290IFdlaWdodCIsIHhsYWIgPSAiTWVhbiBXZWlnaHQgKG1nKSIsIHlsYWIgPSAiSXNvbGF0ZSBJRCIpCmBgYAoKIyMjIyAyLjIuNC4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wKCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBXZXQgU2hvb3QgTWVhbiB3ZWlnaHQgKG1nKSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBsYW50cyB0aGF0IHdlcmUgaW5vY3VsYXRlZCB3aXRoIGEgbXVjaWxhZ2UgaXNvbGF0ZXMgYW5kIHRoZSBub24taW5vY3VsYXRlZCBjb250cm9sLgoKYGBge3J9CnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzIuMl9XUywgdHJ0LnZzLmN0cmx+aXNvbGF0ZSxyZWY9MzIpJGNvbnRyYXN0cywgYWxwaGE9MC4xKSwgbWFpbj0iTWVhbiBXZXQgU2hvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKPiBCQ1cyMDE4NDkgaGFzIGEgbWVhbiB3ZXQgc2hvb3Qgd2VpZ2h0IHRoYXQgaXMgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBmcm9tIHRoYXQgb2YgdGhlIGNvbnRyb2wgYXQgYW4gYWxwaGEgbGV2ZWwgb2YgMC4xCgojIyBCYXRjaCAyLjMKCmBgYHtyfQojIGFuYWx5emUgc2V0IDIuMyBkYXRhCnN0cihzZXRfMi4zKQoKI3N1YnNldCBieSBzYW1wbGUgdHlwZQoKc2V0XzIuM19EUiA8LSBmaWx0ZXIoc2V0XzIuMywgc2FtcGxlID09ICJEUiIpCnNldF8yLjNfRFMgPC0gZmlsdGVyKHNldF8yLjMsIHNhbXBsZSA9PSAiRFMiKQpzZXRfMi4zX1dSIDwtIGZpbHRlcihzZXRfMi4zLCBzYW1wbGUgPT0gIldSIikKc2V0XzIuM19XUyA8LSBmaWx0ZXIoc2V0XzIuMywgc2FtcGxlID09ICJXUyIpCmBgYAoKKipFeHBlcmltZW50YWwgRGVzaWduIFRhYmxlKioKICAKICB8IFN0cnVjdHVyZSB8IEZhY3RvciB8IFR5cGUgfCAjIGxldmVscyB8CiAgfC0tLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS0tfAogIHwgVHJlYXRtZW50IHwgSXNvbGF0ZSB8IFF1YWxpdGF0aXZlIHwgMjkgfAogIHwgRGVzaWduICAgIHwgTVMgTWVkaWEgU2xhbnRzIHwgRXhwZXJpbWVudGFsIFVuaXQgfCA4NyB8CiAgfCBSZXNwb25zZSAgfCBQbGFudCBUaXNzdWUgV2VpZ2h0IHwgT2JzZXJ2YXRpb25hbCBVbml0IHwgMzQ4IHwKICB8UmVzcG9uc2UgfCBEcnkgUm9vdCBXZWlnaHQgKERSKSB8IFZhcmlhYmxlIHwgODcgfCAKICB8IFJlc3BvbnNlIHwgRHJ5IFNob290IFdlaWdodCAoRFMpIHwgVmFyaWFibGUgfCA4NyB8CiAgfCBSZXNwb25zZSB8IFdldCBSb290IFdlaWdodCAoV1IpIHwgVmFyaWFibGUgfCA4NyB8IAogIHwgUmVzcG9uc2UgfCBXZXQgU2hvb3QgV2VpZ2h0IChXUykgfCBWYXJpYWJsZSB8IDg3IHwKCiMjIyAyLjMuMS4gRHJ5IFJvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiBkcnkgcm9vdCBkYXRhCmxtX3NldF8yLjNfRFIgPC0gbG0obWcgfiAxICsgaXNvbGF0ZSwgc2V0XzIuM19EUikKb3AgPSBwYXIobWZyb3c9YygxLDIpKQpwbG90KGxtX3NldF8yLjNfRFIsIHdoaWNoID0gYygyLDMpKQpwYXIob3ApCmBgYAoKIyMjIyAyLjMuMS4gLSBBbm92YQoKYGBge3J9CiMgYXNzZXNzIHZhcmlhbmNlIAphbm92YShsbV9zZXRfMi4zX0RSKQpgYGAKCj4gVGhlcmUgYXBwZWFycyB0byBiZSBubyBzaWduaWZpY2FudCBkaWZmZXJlbmNlcyBhbW9uZyB0aGUgZml0dGVkIHZhbHVlcyBiYXNlZCBvbiB0aGUgYW5vdmEuCgojIyMjIDIuMy4xLiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3MyLjMuZHVuLkRSIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfMi4zX0RSLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTI2KSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3MyLjMuZHVuLkRSLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zMi4zLmR1bi5EUi5jc3YiKQpgYGAKCiMjIyMgMi4zLjEuIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzIuM19EUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzIuM19EUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpLCBtYWluPSJBbGwgcGFpcndpc2UgY29tcGFyaXNvbnMgZm9yIE1lYW4gRHJ5IFJvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDIuMy4xLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBSb290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbC4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8yLjNfRFIsIHRydC52cy5jdHJsfmlzb2xhdGUscmVmPTI2KSRjb250cmFzdHMsIGFscGhhPTAuMSksIG1haW49Ik1lYW4gRHJ5IFJvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKPiBCQ1cyMDE4ODEgaGFzIGEgaGlnaGVyIG1lYW4gZXN0aW1hdGUgZm9yIGRyeSByb290IHdlaWdodCB0aGFuIHRoZSBjb250cm9sIHdpdGggbm9uLW92ZXJsYXBwaW5nIGNvbmZpZGVuY2UgaW50ZXJ2YWxzLgoKIyMjIDIuMy4yLiBEcnkgU2hvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiBkcnkgc2hvb3QgZGF0YQpsbV9zZXRfMi4zX0RTIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF8yLjNfRFMpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMi4zX0RTLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgMi4zLjIuIC0gQW5vdmEKYGBge3J9CiMgYXNzZXNzIHZhcmlhbmNlCmFub3ZhKGxtX3NldF8yLjNfRFMpCmBgYAoKIyMjIyAyLjMuMi4gLSBMU01lYW5zIC0gRHVubmV0dAoKYGBge3J9CmxzbV9zMi4zLmR1bi5EUyA8LSBzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzIuM19EUywgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj0yNikkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKd3JpdGUuY3N2KGxzbV9zMi4zLmR1bi5EUywgIi4vbHNtZWFuc19zdW1tYXJ5X3RhYmxlcy9sc21fczIuMy5kdW4uRFMuY3N2IikKYGBgCgojIyMjIDIuMy4yLiAtIENMRCAtIChQYWlyd2lzZSBieSBpc29sYXRlKQoKYGBge3J9CkNMRChsc21lYW5zKGxtX3NldF8yLjNfRFMsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF8yLjNfRFMsIH5pc29sYXRlKSwgYWxwaGE9MC4xKSwgbWFpbj0iQWxsIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBNZWFuIERyeSBTaG9vdCBXZWlnaHQiLCB4bGFiID0gIk1lYW4gV2VpZ2h0IChtZykiLCB5bGFiID0gIklzb2xhdGUgSUQiKQpgYGAKCiMjIyMgMi4zLjIuIC0gQ0xEIC0gTWVhbiBFc3RpbWF0ZSBEaWZmZXJlbmNlcyB0byBDb250cm9sCgpDb21wYWN0IExldHRlciBEaXNwbGF5IG9mIGVzdGltYXRlcyBmb3IgRHJ5IFNob290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbC4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8yLjNfRFMsIHRydC52cy5jdHJsfmlzb2xhdGUscmVmPTI2KSRjb250cmFzdHMsIGFscGhhPTAuMSksIG1haW49Ik1lYW4gRHJ5IFNob290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbCIsIHhsYWIgPSAiRGlmZmVyZW5jZSBvZiBNZWFuIEVzdGltYXRlcyAobWcpIiwgeWxhYiA9ICJDb250cmFzdHMiKQpgYGAKCj4gQWxsIG9mIHRoZSBpc29sYXRlcyBoYXZlIG1lYW5zIHdpdGggY29uZmlkZW5jZSBpbnRlcnZhbHMgdGhhdCBvdmVybGFwIHdpdGggdGhhdCBvZiB0aGUgY29udHJvbCBmb3Igc2V0IDIuMwoKIyMjIDIuMy4zLiBXZXQgUm9vdCBXZWlnaHQKCmBgYHtyLCBmaWcud2lkdGg9MTB9CiMgbGluZWFyIG1vZGVsIG9mIHdldCByb290IGRhdGEKbG1fc2V0XzIuM19XUiA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfMi4zX1dSKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzIuM19XUiwgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDIuMy4zIC0gQW5vdmEKCmBgYHtyfQoKIyBhc3Nlc3MgdmFyaWFuY2UKYW5vdmEobG1fc2V0XzIuM19XUikKYGBgCgojIyMjIDIuMy4zLiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3MyLjMuZHVuLldSIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfMi4zX1dSLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTI2KSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3MyLjMuZHVuLldSLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zMi4zLmR1bi5XUi5jc3YiKQpgYGAKCiMjIyMgMi4zLjMuIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzIuM19XUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzIuM19XUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpLCBtYWluPSJBbGwgcGFpcndpc2UgY29tcGFyaXNvbnMgZm9yIE1lYW4gV2V0IFJvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDIuMy4zLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIFdldCBSb290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbC4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8yLjNfV1IsIHRydC52cy5jdHJsfmlzb2xhdGUscmVmPTI2KSRjb250cmFzdHMsIGFscGhhPTAuMSksIG1haW49Ik1lYW4gV2V0IFJvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKCj4gV2V0IFJvb3QgZGF0YSBzaG93cyBhbGwgaXNvbGF0ZSBtZWFuIGVzdGltYXRlcyBoYXZlIENvbmZpZGVuY2UgSW50ZXJ2YWxzIHRoYXQgb3ZlcmxhcC4KCiMjIyAyLjMuNC4gV2V0IFNob290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2YgV2V0IHNob290IGRhdGEKbG1fc2V0XzIuM19XUyA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfMi4zX1dTKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzIuM19XUywgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDIuMy40LiAtIEFub3ZhCgpgYGB7cn0KIyBhc3Nlc3MgdmFyaWFuY2UKYW5vdmEobG1fc2V0XzIuM19XUykKYGBgCgo+IEFub3ZhIHNob3dzIHNpbWlsYXIgcmVzdWx0IHRvIGRyeSBzaG9vdC4KCiMjIyMgMi4zLjQuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpsc21fczIuMy5kdW4uV1MgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF8yLjNfV1MsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9MjYpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczIuMy5kdW4uV1MsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3MyLjMuZHVuLldTLmNzdiIpCmBgYAoKIyMjIyAyLjMuNC4gLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfMi4zX0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMi4zX0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBXZXQgU2hvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDIuMy40LiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIFdldCBTaG9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMi4zX0RTLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0yNikkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIFdldCBTaG9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IEFsbCBpc29sYXRlcyBtZWFucyBhbmQgQ0kncyBvdmVybGFwIHdpdGggdGhlIGNvbnRyb2wuCgojIyBCYXRjaCAyLjQKCmBgYHtyfQojIGFuYWx5emUgc2V0IDIuNCBkYXRhCnN0cihzZXRfMi40KQoKI3N1YnNldCBieSBzYW1wbGUgdHlwZQoKc2V0XzIuNF9EUiA8LSBmaWx0ZXIoc2V0XzIuNCwgc2FtcGxlID09ICJEUiIpCnNldF8yLjRfRFMgPC0gZmlsdGVyKHNldF8yLjQsIHNhbXBsZSA9PSAiRFMiKQpzZXRfMi40X1dSIDwtIGZpbHRlcihzZXRfMi40LCBzYW1wbGUgPT0gIldSIikKc2V0XzIuNF9XUyA8LSBmaWx0ZXIoc2V0XzIuNCwgc2FtcGxlID09ICJXUyIpCmBgYAoKKipFeHBlcmltZW50YWwgRGVzaWduIFRhYmxlKioKICAKICB8IFN0cnVjdHVyZSB8IEZhY3RvciB8IFR5cGUgfCAjIGxldmVscyB8CiAgfC0tLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS0tfAogIHwgVHJlYXRtZW50IHwgSXNvbGF0ZSB8IFF1YWxpdGF0aXZlIHwgMzcgfAogIHwgRGVzaWduICAgIHwgTVMgTWVkaWEgU2xhbnRzIHwgRXhwZXJpbWVudGFsIFVuaXQgfCAxMTEgfAogIHwgUmVzcG9uc2UgIHwgUGxhbnQgVGlzc3VlIFdlaWdodCB8IE9ic2VydmF0aW9uYWwgVW5pdCB8IDQ0NCB8CiAgfFJlc3BvbnNlIHwgRHJ5IFJvb3QgV2VpZ2h0IChEUikgfCBWYXJpYWJsZSB8IDExMSB8IAogIHwgUmVzcG9uc2UgfCBEcnkgU2hvb3QgV2VpZ2h0IChEUykgfCBWYXJpYWJsZSB8IDExMSB8CiAgfCBSZXNwb25zZSB8IFdldCBSb290IFdlaWdodCAoV1IpIHwgVmFyaWFibGUgfCAxMTEgfCAKICB8IFJlc3BvbnNlIHwgV2V0IFNob290IFdlaWdodCAoV1MpIHwgVmFyaWFibGUgfCAxMTEgfAoKIyMjIDIuNC4xLiBEcnkgUm9vdCBXZWlnaHQKCmBgYHtyLCBmaWcud2lkdGg9MTB9CiMgbGluZWFyIG1vZGVsIG9mIGRyeSByb290IGRhdGEgZm9yIHNldCAyLjQKbG1fc2V0XzIuNF9EUiA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfMi40X0RSKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzIuNF9EUiwgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDIuNC4xLiAtIEFub3ZhCgpgYGB7cn0KIyBhc3Nlc3MgdmFyaWFuY2UKYW5vdmEobG1fc2V0XzIuNF9EUikKYGBgCgojIyMjIDIuNC4xLiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3MyLjQuZHVuLkRSIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfMi40X0RSLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTM2KSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3MyLjQuZHVuLkRSLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zMi40LmR1bi5EUi5jc3YiKQpgYGAKCiMjIyMgMi40LjEuIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzIuNF9EUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzIuNF9EUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpLCBtYWluPSJBbGwgcGFpcndpc2UgY29tcGFyaXNvbnMgZm9yIE1lYW4gRHJ5IFJvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDIuNC4xLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBSb290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbC4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8yLjRfRFIsIHRydC52cy5jdHJsfmlzb2xhdGUscmVmPTM2KSRjb250cmFzdHMsIGFscGhhPTAuMSksIG1haW49Ik1lYW4gRHJ5IFJvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKPiBCQ1cyMDE5MDAgaGFzIGEgbWVhbiBkcnkgcm9vdCB3ZWlnaHQgd2l0aCBub24tb3ZlcmxhcHBpbmcgY29uZmlkZW5jZSBpbnRlcnZhbHMgcmVsYXRpdmUgdG8gdGhvc2Ugb2YgdGhlIGNvbnRyb2wsIHdoZW4gY29tcGFyZWQgYXQgYW4gYWxwaGEgbGV2ZWwgb2YgMC4xLiBUaGUgbWVhbiBvZiA4LjYzIG1nIGlzIG5lYXJseSB0aHJlZSB0aW1lcyBoaWdoZXIgdGhhbiB0aGF0IG9mIHRoZSBjb250cm9sLCB3aGljaCBpcyAzLjAgbWcuCgojIyMgMi40LjIuIERyeSBTaG9vdCBXZWlnaHQKCmBgYHtyLCBmaWcud2lkdGg9MTB9CiMgbGluZWFyIG1vZGVsIG9mIGRyeSBzaG9vdCBkYXRhIGZyb20gc2V0IDIuNApsbV9zZXRfMi40X0RTIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF8yLjRfRFMpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMi40X0RTLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgMi40LjIuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZQphbm92YShsbV9zZXRfMi40X0RTKQpgYGAKCiMjIyMgMi40LjIuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpsc21fczIuNC5kdW4uRFMgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF8yLjRfRFMsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9MzYpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczIuNC5kdW4uRFMsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3MyLjQuZHVuLkRTLmNzdiIpCmBgYAoKIyMjIyAyLjQuMi4gLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfMi40X0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMi40X0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBEcnkgU2hvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDIuNC4yLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBTaG9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMi40X0RTLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0zNikkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIERyeSBTaG9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IEJDVzIwMTgxNCBhbmQgQkNXMjAxOTAwIGJvdGggaGF2ZSBtZWFucyB3aXRoIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIHRoYXQgZG8gbm90IG92ZXJsYXAgd2l0aCB0aGUgbWVhbiBvZiB0aGUgY29udHJvbCBmb3IgaXNvbGF0ZSBzZXQgMi40IChhdCBhbiBhbHBoYSBsZXZlbCBvZiAwLjEpCgojIyMgMi40LjMuIFdldCBSb290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2YgV2V0IFJvb3QgZGF0YSBmcm9tIHNldCAyLjQKbG1fc2V0XzIuNF9XUiA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfMi40X1dSKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzIuNF9XUiwgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDIuNC4zLiAtIEFub3ZhCgpgYGB7cn0KIyBhc3Nlc3MgdmFyaWFuY2UKYW5vdmEobG1fc2V0XzIuNF9XUikKYGBgCgojIyMjIDIuNC4zLiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3MyLjQuZHVuLldSIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfMi40X1dSLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTM2KSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3MyLjQuZHVuLldSLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zMi40LmR1bi5XUi5jc3YiKQpgYGAKCiMjIyMgMi40LjMuIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzIuNF9XUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzIuNF9XUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpLCBtYWluPSJBbGwgcGFpcndpc2UgY29tcGFyaXNvbnMgZm9yIE1lYW4gV2V0IFJvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDIuNC4zLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIFdldCBSb290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbC4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8yLjRfV1IsIHRydC52cy5jdHJsfmlzb2xhdGUscmVmPTM2KSRjb250cmFzdHMsIGFscGhhPTAuMSksIG1haW49Ik1lYW4gV2V0IFJvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKPiBCQ1cyMDE5MDAgd2V0IHJvb3QgbWVhbiBhbmQgYXNzb2NpYXRlZCBDSSBkbyBub3Qgb3ZlcmxhcCB3aXRoIHRob3NlIG9mIHRoZSBjb250cm9sLCBhbmQgdGhlIG1lYW4gaXMgdGhyZWUgdGltZXMgdGhhdCBvZiB0aGUgY29udHJvbC4KCiMjIyAyLjQuNC4gV2V0IFNob290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2YgV2V0IFNob290IGRhdGEgZnJvbSBzZXQgMi40CmxtX3NldF8yLjRfV1MgPC0gbG0obWcgfiAxICsgaXNvbGF0ZSwgc2V0XzIuNF9XUykKb3AgPSBwYXIobWZyb3c9YygxLDIpKQpwbG90KGxtX3NldF8yLjRfV1MsIHdoaWNoID0gYygyLDMpKQpwYXIob3ApCmBgYAoKIyMjIyAyLjQuNC4gLSBBbm92YQoKYGBge3J9CiMgYXNzZXNzIHZhcmlhbmNlCmFub3ZhKGxtX3NldF8yLjRfV1MpCmBgYAoKIyMjIyAyLjQuNC4gLSBMU01lYW5zIC0gRHVubmV0dAoKYGBge3J9CmxzbV9zMi40LmR1bi5XUyA8LSBzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzIuNF9XUywgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj0zNikkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKd3JpdGUuY3N2KGxzbV9zMi40LmR1bi5XUywgIi4vbHNtZWFuc19zdW1tYXJ5X3RhYmxlcy9sc21fczIuNC5kdW4uV1MuY3N2IikKYGBgCgojIyMjIDIuNC40LiAtIENMRCAtIChQYWlyd2lzZSBieSBpc29sYXRlKQoKYGBge3J9CkNMRChsc21lYW5zKGxtX3NldF8yLjRfV1MsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF8yLjRfV1MsIH5pc29sYXRlKSwgYWxwaGE9MC4xKSwgbWFpbj0iQWxsIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBNZWFuIFdldCBTaG9vdCBXZWlnaHQiLCB4bGFiID0gIk1lYW4gV2VpZ2h0IChtZykiLCB5bGFiID0gIklzb2xhdGUgSUQiKQpgYGAKCiMjIyMgMi40LjQuIC0gQ0xEIC0gTWVhbiBFc3RpbWF0ZSBEaWZmZXJlbmNlcyB0byBDb250cm9sCgpDb21wYWN0IExldHRlciBEaXNwbGF5IG9mIGVzdGltYXRlcyBmb3IgV2V0IFNob290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbC4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8yLjRfV1MsIHRydC52cy5jdHJsfmlzb2xhdGUscmVmPTM2KSRjb250cmFzdHMsIGFscGhhPTAuMSksIG1haW49Ik1lYW4gV2V0IFNob290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbCIsIHhsYWIgPSAiRGlmZmVyZW5jZSBvZiBNZWFuIEVzdGltYXRlcyAobWcpIiwgeWxhYiA9ICJDb250cmFzdHMiKQpgYGAKCgo+IEJDVzIwMTkwMCBhbmQgQkNXMjAxODE0IGFyZSB0aGUgb25seSBpc29sYXRlcyB0aGF0IGhhdmUgbWVhbiB3ZXQgc2hvb3Qgd2VpZ2h0IGVzdGltYXRlcyB3aXRoIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIHRoYXQgZG8gbm90IG92ZXJsYXAgd2l0aCB0aG9zZSBvZiB0aGUgY29udHJvbC4KCiMjIEJhdGNoIDMuMQoKYGBge3J9CiMgYW5hbHl6ZSBzZXQgMy4xIGRhdGEKc3RyKHNldF8zLjEpCgojc3Vic2V0IGJ5IHNhbXBsZSB0eXBlCgpzZXRfMy4xX0RSIDwtIGZpbHRlcihzZXRfMy4xLCBzYW1wbGUgPT0gIkRSIikKc2V0XzMuMV9EUyA8LSBmaWx0ZXIoc2V0XzMuMSwgc2FtcGxlID09ICJEUyIpCnNldF8zLjFfV1IgPC0gZmlsdGVyKHNldF8zLjEsIHNhbXBsZSA9PSAiV1IiKQpzZXRfMy4xX1dTIDwtIGZpbHRlcihzZXRfMy4xLCBzYW1wbGUgPT0gIldTIikKCmBgYAoKKipFeHBlcmltZW50YWwgRGVzaWduIFRhYmxlKioKICAKICB8IFN0cnVjdHVyZSB8IEZhY3RvciB8IFR5cGUgfCAjIGxldmVscyB8CiAgfC0tLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS0tfAogIHwgVHJlYXRtZW50IHwgSXNvbGF0ZSB8IFF1YWxpdGF0aXZlIHwgMzggfAogIHwgRGVzaWduICAgIHwgTVMgTWVkaWEgU2xhbnRzIHwgRXhwZXJpbWVudGFsIFVuaXQgfCAxMTQgfAogIHwgUmVzcG9uc2UgIHwgUGxhbnQgVGlzc3VlIFdlaWdodCB8IE9ic2VydmF0aW9uYWwgVW5pdCB8IDQ1NiB8CiAgfFJlc3BvbnNlIHwgRHJ5IFJvb3QgV2VpZ2h0IChEUikgfCBWYXJpYWJsZSB8IDExNCB8IAogIHwgUmVzcG9uc2UgfCBEcnkgU2hvb3QgV2VpZ2h0IChEUykgfCBWYXJpYWJsZSB8IDExNCB8CiAgfCBSZXNwb25zZSB8IFdldCBSb290IFdlaWdodCAoV1IpIHwgVmFyaWFibGUgfCAxMTQgfCAKICB8IFJlc3BvbnNlIHwgV2V0IFNob290IFdlaWdodCAoV1MpIHwgVmFyaWFibGUgfCAxMTQgfAoKIyMjIDMuMS4xLiBEcnkgUm9vdCBXZWlnaHQKCmBgYHtyLCBmaWcud2lkdGg9MTB9CiMgbGluZWFyIG1vZGVsIG9mIGRyeSByb290IGRhdGEKbG1fc2V0XzMuMV9EUiA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfMy4xX0RSKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzMuMV9EUiwgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDMuMS4xLiAtIEFub3ZhCgpgYGB7cn0KIyBhc3Nlc3MgdmFyaWFuY2UKYW5vdmEobG1fc2V0XzMuMV9EUikKYGBgCgojIyMjIDMuMS4xLiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3MzLjEuZHVuLkRSIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfMy4xX0RSLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTM3KSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3MzLjEuZHVuLkRSLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zMy4xLmR1bi5EUi5jc3YiKQpgYGAKCiMjIyMgMy4xLjEuIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzMuMV9EUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzMuMV9EUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpLCBtYWluPSJBbGwgcGFpcndpc2UgY29tcGFyaXNvbnMgZm9yIE1lYW4gRHJ5IFJvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDMuMS4xLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBSb290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbC4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8zLjFfRFIsIHRydC52cy5jdHJsfmlzb2xhdGUscmVmPTM3KSRjb250cmFzdHMsIGFscGhhPTAuMSksIG1haW49Ik1lYW4gRHJ5IFJvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKPiBCQ1cyMDEwODggaGFzIGEgbWVhbiBkcnkgcm9vdCB3ZWlnaHQgZXN0aW1hdGUgd2l0aCBjb25maWRlbmNlIGludGVydmFscyB0aGF0IGRvIG5vdCBvdmVybGFwIHdpdGggdGhlIGNvbnRyb2wsIGJ1dCB0aGUgbG93ZXIgQ0wgb2YgMjAxMDg4IGlzIHZlcnkgY2xvc2UgdG8gdGhlIHVwcGVyIENMIG9mIHRoZSBjb250cm9sIGVzdGltYXRlLgoKIyMjIDMuMS4yLiBEcnkgU2hvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiBkcnkgc2hvb3QgZGF0YQpsbV9zZXRfMy4xX0RTIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF8zLjFfRFMpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMy4xX0RTLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgMy4xLjIuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZQphbm92YShsbV9zZXRfMy4xX0RTKQpgYGAKCiMjIyMgMy4xLjIuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpsc21fczMuMS5kdW4uRFMgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF8zLjFfRFMsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9MzcpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczMuMS5kdW4uRFMsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3MzLjEuZHVuLkRTLmNzdiIpCmBgYAoKIyMjIyAzLjEuMi4gLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfMy4xX0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy4xX0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBEcnkgU2hvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDMuMS4yLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBTaG9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy4xX0RTLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0zNykkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIERyeSBTaG9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IEJDVzIwMTkxNCBoYXMgYSBtZWFuIGRyeSBzaG9vdCB3ZWlnaHQgdGhhdCBpcyBuZWFybHkgdGhyZWUgdGltZXMgdGhhdCBvZiB0aGUgY29udHJvbCBhbmQgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIGJldHdlZW4gdGhlIHR3byBkbyBub3Qgb3ZlcmxhcCBhdCBhbiBhbHBoYSBsZXZlbCBvZiAwLjEuCgojIyMgMy4xLjMuIFdldCBSb290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2Ygd2V0IHJvb3QgZGF0YQpsbV9zZXRfMy4xX1dSIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF8zLjFfV1IpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMy4xX1dSLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgMy4xLjMuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZQphbm92YShsbV9zZXRfMy4xX1dSKQpgYGAKCiMjIyMgMy4xLjMuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzMuMV9XUiwgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj0zNykkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKYGBgCgojIyMjIDMuMS4zLiAtIENMRCAtIChQYWlyd2lzZSBieSBpc29sYXRlKQoKYGBge3J9CkNMRChsc21lYW5zKGxtX3NldF8zLjFfV1IsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF8zLjFfV1IsIH5pc29sYXRlKSwgYWxwaGE9MC4xKSwgbWFpbj0iQWxsIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBNZWFuIFdldCBSb290IFdlaWdodCIsIHhsYWIgPSAiTWVhbiBXZWlnaHQgKG1nKSIsIHlsYWIgPSAiSXNvbGF0ZSBJRCIpCmBgYAoKIyMjIyAzLjEuMy4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wKCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBXZXQgUm9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy4xX1dSLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0zNykkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIFdldCBSb290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbCIsIHhsYWIgPSAiRGlmZmVyZW5jZSBvZiBNZWFuIEVzdGltYXRlcyAobWcpIiwgeWxhYiA9ICJDb250cmFzdHMiKQpgYGAKCj4gVGhlIHJlc3VsdHMgZm9yIHRoZSB3ZXQgcm9vdCBkYXRhIGFncmVlIHdpdGggdGhvc2Ugb2YgdGhlIGRyeSByb290IGRhdGEuCgojIyMgMy4xLjQuIFdldCBTaG9vdCBXZWlnaHQKCmBgYHtyLCBmaWcud2lkdGg9MTB9CiMgbGluZWFyIG1vZGVsIG9mIHdldCBzaG9vdCBkYXRhCmxtX3NldF8zLjFfV1MgPC0gbG0obWcgfiAxICsgaXNvbGF0ZSwgc2V0XzMuMV9XUykKb3AgPSBwYXIobWZyb3c9YygxLDIpKQpwbG90KGxtX3NldF8zLjFfV1MsIHdoaWNoID0gYygyLDMpKQpwYXIob3ApCmBgYAoKIyMjIyAzLjEuNC4gLSBBbm92YQoKYGBge3J9CiMgYXNzZXNzIHZhcmlhbmNlCmFub3ZhKGxtX3NldF8zLjFfV1MpCmBgYAoKCiMjIyMgMy4xLjQuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpsc21fczMuMS5kdW4uV1MgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF8zLjFfV1MsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9MzcpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczMuMS5kdW4uV1MsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3MzLjEuZHVuLldTLmNzdiIpCmBgYAoKIyMjIyAzLjEuNC4gLSBDTEQKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfMy4xX1dTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy4xX1dTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IlNldCAzLjE6IEFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBXZXQgU2hvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgo+IENvbmZpZGVuY2UgaW50ZXJ2YWxzIG92ZXJsYXAgYmV0d2VlbiBpc29sYXRlcyB3aXRoIGxhcmdlc3QgbWVhbiBkaWZmZXJlbmNlcyB0byB0aGUgY29udHJvbC4KCiMjIEJhdGNoIDMuMgpgYGB7cn0KIyBhbmFseXplIHNldCAzLjIgZGF0YQpzdHIoc2V0XzMuMikKCiNzdWJzZXQgYnkgc2FtcGxlIHR5cGUKc2V0XzMuMl9EUiA8LSBmaWx0ZXIoc2V0XzMuMiwgc2FtcGxlID09ICJEUiIpCnNldF8zLjJfRFMgPC0gZmlsdGVyKHNldF8zLjIsIHNhbXBsZSA9PSAiRFMiKQpzZXRfMy4yX1dSIDwtIGZpbHRlcihzZXRfMy4yLCBzYW1wbGUgPT0gIldSIikKc2V0XzMuMl9XUyA8LSBmaWx0ZXIoc2V0XzMuMiwgc2FtcGxlID09ICJXUyIpCmBgYAoKKipFeHBlcmltZW50YWwgRGVzaWduIFRhYmxlKioKICAKICB8IFN0cnVjdHVyZSB8IEZhY3RvciB8IFR5cGUgfCAjIGxldmVscyB8CiAgfC0tLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS0tfAogIHwgVHJlYXRtZW50IHwgSXNvbGF0ZSB8IFF1YWxpdGF0aXZlIHwgMjYgfAogIHwgRGVzaWduICAgIHwgTVMgTWVkaWEgU2xhbnRzIHwgRXhwZXJpbWVudGFsIFVuaXQgfCA3OCB8CiAgfCBSZXNwb25zZSAgfCBQbGFudCBUaXNzdWUgV2VpZ2h0IHwgT2JzZXJ2YXRpb25hbCBVbml0IHwgMzEyIHwKICB8UmVzcG9uc2UgfCBEcnkgUm9vdCBXZWlnaHQgKERSKSB8IFZhcmlhYmxlIHwgNzggfCAKICB8IFJlc3BvbnNlIHwgRHJ5IFNob290IFdlaWdodCAoRFMpIHwgVmFyaWFibGUgfCA3OCB8CiAgfCBSZXNwb25zZSB8IFdldCBSb290IFdlaWdodCAoV1IpIHwgVmFyaWFibGUgfCA3OCB8IAogIHwgUmVzcG9uc2UgfCBXZXQgU2hvb3QgV2VpZ2h0IChXUykgfCBWYXJpYWJsZSB8IDc4IHwKCiMjIyAzLjIuMS4gRHJ5IFJvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiBkcnkgcm9vdCBkYXRhCmxtX3NldF8zLjJfRFIgPC0gbG0obWcgfiAxICsgaXNvbGF0ZSwgc2V0XzMuMl9EUikKb3AgPSBwYXIobWZyb3c9YygxLDIpKQpwbG90KGxtX3NldF8zLjJfRFIsIHdoaWNoID0gYygyLDMpKQpwYXIob3ApCmBgYAoKIyMjIyAzLjIuMS4gLSBBbm92YQoKYGBge3J9CiMgYXNzZXNzIHZhcmlhbmNlCmFub3ZhKGxtX3NldF8zLjJfRFIpCmBgYAoKIyMjIyAzLjIuMS4gLSBMU01lYW5zIC0gRHVubmV0dAoKYGBge3J9CmxzbV9zMy4yLmR1bi5EUiA8LSBzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzMuMl9EUiwgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj0yNSkkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKd3JpdGUuY3N2KGxzbV9zMy4yLmR1bi5EUiwgIi4vbHNtZWFuc19zdW1tYXJ5X3RhYmxlcy9sc21fczMuMi5kdW4uRFIuY3N2IikKYGBgCgojIyMjIDMuMi4xLiAtIENMRCAtIChQYWlyd2lzZSBieSBpc29sYXRlKQoKYGBge3J9CkNMRChsc21lYW5zKGxtX3NldF8zLjJfRFIsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF8zLjJfRFIsIH5pc29sYXRlKSwgYWxwaGE9MC4xKSwgbWFpbj0iQWxsIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBNZWFuIERyeSBSb290IFdlaWdodCIsIHhsYWIgPSAiTWVhbiBXZWlnaHQgKG1nKSIsIHlsYWIgPSAiSXNvbGF0ZSBJRCIpCmBgYAoKIyMjIyAzLjIuMS4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wKCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBEcnkgUm9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy4yX0RSLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0yNSkkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIERyeSBSb290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbCIsIHhsYWIgPSAiRGlmZmVyZW5jZSBvZiBNZWFuIEVzdGltYXRlcyAobWcpIiwgeWxhYiA9ICJDb250cmFzdHMiKQpgYGAKCj4gVGhlcmUgYXJlIG5vIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IG1lYW5zIGVzdGltYXRlcwoKIyMjIDMuMi4yLiBEcnkgU2hvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiBkcnkgc2hvb3QgZGF0YQpsbV9zZXRfMy4yX0RTIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF8zLjJfRFMpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMy4yX0RTLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgMy4yLjIuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZQphbm92YShsbV9zZXRfMy4yX0RTKQpgYGAKCiMjIyMgMy4yLjIuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpsc21fczMuMi5kdW4uRFMgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF8zLjJfRFMsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9MjUpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczMuMi5kdW4uRFMsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3MzLjIuZHVuLkRTLmNzdiIpCmBgYAoKIyMjIyAzLjIuMi4gLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfMy4yX0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy4yX0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBEcnkgU2hvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDMuMi4yLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBTaG9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy4yX0RTLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0yNSkkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIERyeSBTaG9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IFRoZXJlIGFyZSBubyBzaWduaWZpY2FudGx5IGRpZmZlcmVudCBtZWFucyBlc3RpbWF0ZXMgZm9yIERyeSBTaG9vdCB3ZWlnaHQgaW4gQmF0Y2ggMy4yLgoKIyMjIDMuMi4zLiBXZXQgUm9vdCBEYXRhCgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiB3ZXQgcm9vdCBkYXRhCmxtX3NldF8zLjJfV1IgPC0gbG0obWcgfiAxICsgaXNvbGF0ZSwgc2V0XzMuMl9XUikKb3AgPSBwYXIobWZyb3c9YygxLDIpKQpwbG90KGxtX3NldF8zLjJfV1IsIHdoaWNoID0gYygyLDMpKQpwYXIob3ApCmBgYAoKIyMjIyAzLjIuMy4gLSBBbm92YQoKYGBge3J9CiMgYXNzZXNzIHZhcmlhbmNlCmFub3ZhKGxtX3NldF8zLjJfV1IpCmBgYAoKIyMjIyAzLjIuMy4gLSBMU01lYW5zIC0gRHVubmV0dAoKYGBge3J9CmxzbV9zMy4yLmR1bi5XUiA8LSBzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzMuMl9XUiwgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj0yNSkkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKd3JpdGUuY3N2KGxzbV9zMy4yLmR1bi5XUiwgIi4vbHNtZWFuc19zdW1tYXJ5X3RhYmxlcy9sc21fczMuMi5kdW4uV1IuY3N2IikKYGBgCgojIyMjIDMuMi4zLiAtIENMRCAtIChQYWlyd2lzZSBieSBpc29sYXRlKQoKYGBge3J9CkNMRChsc21lYW5zKGxtX3NldF8zLjJfV1IsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF8zLjJfV1IsIH5pc29sYXRlKSwgYWxwaGE9MC4xKSwgbWFpbj0iQWxsIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBNZWFuIFdldCBSb290IFdlaWdodCIsIHhsYWIgPSAiTWVhbiBXZWlnaHQgKG1nKSIsIHlsYWIgPSAiSXNvbGF0ZSBJRCIpCmBgYAoKIyMjIyAzLjIuMy4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wKCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBXZXQgUm9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy4yX1dSLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0yNSkkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIFdldCBSb290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbCIsIHhsYWIgPSAiRGlmZmVyZW5jZSBvZiBNZWFuIEVzdGltYXRlcyAobWcpIiwgeWxhYiA9ICJDb250cmFzdHMiKQpgYGAKCj4gVGhlcmUgYXJlIG5vIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IG1lYW5zIGVzdGltYXRlcyBmb3Igd2V0IHJvb3Qgd2VpZ2h0IGluIGJhdGNoIDMuMi4KCiMjIyAzLjIuNC4gV2V0IFNob290IERhdGEKCmBgYHtyLCBmaWcud2lkdGg9MTB9CiMgbGluZWFyIG1vZGVsIG9mIHdldCBzaG9vdCBkYXRhCmxtX3NldF8zLjJfV1MgPC0gbG0obWcgfiAxICsgaXNvbGF0ZSwgc2V0XzMuMl9XUykKb3AgPSBwYXIobWZyb3c9YygxLDIpKQpwbG90KGxtX3NldF8zLjJfV1MsIHdoaWNoID0gYygyLDMpKQpwYXIob3ApCmBgYAoKIyMjIyAzLjIuNC4gLSBBbm92YQoKYGBge3J9CiMgYXNzZXNzIHZhcmlhbmNlCmFub3ZhKGxtX3NldF8zLjJfV1MpCmBgYAoKIyMjIyAzLjIuNC4gLSBMU01lYW5zIC0gRHVubmV0dAoKYGBge3J9CmxzbV9zMy4yLmR1bi5XUyA8LSBzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzMuMl9XUywgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj0yNSkkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKd3JpdGUuY3N2KGxzbV9zMy4yLmR1bi5XUywgIi4vbHNtZWFuc19zdW1tYXJ5X3RhYmxlcy9sc21fczMuMi5kdW4uV1MuY3N2IikKYGBgCgojIyMjIDMuMi40LiAtIENMRCAtIChQYWlyd2lzZSBieSBpc29sYXRlKQoKYGBge3J9CkNMRChsc21lYW5zKGxtX3NldF8zLjJfV1MsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF8zLjJfV1MsIH5pc29sYXRlKSwgYWxwaGE9MC4xKSwgbWFpbj0iQWxsIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBNZWFuIFdldCBTaG9vdCBXZWlnaHQiLCB4bGFiID0gIk1lYW4gV2VpZ2h0IChtZykiLCB5bGFiID0gIklzb2xhdGUgSUQiKQpgYGAKCiMjIyMgMy4yLjQuIC0gQ0xEIC0gTWVhbiBFc3RpbWF0ZSBEaWZmZXJlbmNlcyB0byBDb250cm9sCgpDb21wYWN0IExldHRlciBEaXNwbGF5IG9mIGVzdGltYXRlcyBmb3IgV2V0IFNob290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbC4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8zLjJfV1MsIHRydC52cy5jdHJsfmlzb2xhdGUscmVmPTI1KSRjb250cmFzdHMsIGFscGhhPTAuMSksIG1haW49Ik1lYW4gV2V0IFNob290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbCIsIHhsYWIgPSAiRGlmZmVyZW5jZSBvZiBNZWFuIEVzdGltYXRlcyAobWcpIiwgeWxhYiA9ICJDb250cmFzdHMiKQpgYGAKCj4gVGhlcmUgYXJlIG5vIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IG1lYW5zIGVzdGltYXRlcy4gQ29udHJvbCBpcyB0aGUgaGlnaGVzdCBtZWFuLCBhbGwgaW5vY3VsYXRlZCBwbGF0bGV0cyBleGhpYml0ZWQgbG93ZXIgbWVhbiB3ZXQgc2hvb3Qgd2VpZ2h0LgoKIyMgQmF0Y2ggMy4zCgpgYGB7cn0KIyBhbmFseXplIHNldCAzLjMgZGF0YQpzdHIoc2V0XzMuMykKCiNzdWJzZXQgYnkgc2FtcGxlIHR5cGUKCnNldF8zLjNfRFIgPC0gZmlsdGVyKHNldF8zLjMsIHNhbXBsZSA9PSAiRFIiKQpzZXRfMy4zX0RTIDwtIGZpbHRlcihzZXRfMy4zLCBzYW1wbGUgPT0gIkRTIikKc2V0XzMuM19XUiA8LSBmaWx0ZXIoc2V0XzMuMywgc2FtcGxlID09ICJXUiIpCnNldF8zLjNfV1MgPC0gZmlsdGVyKHNldF8zLjMsIHNhbXBsZSA9PSAiV1MiKQoKYGBgCgoqKkV4cGVyaW1lbnRhbCBEZXNpZ24gVGFibGUqKgogIAogIHwgU3RydWN0dXJlIHwgRmFjdG9yIHwgVHlwZSB8ICMgbGV2ZWxzIHwKICB8LS0tLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tfC0tLS0tLS0tLS18CiAgfCBUcmVhdG1lbnQgfCBJc29sYXRlIHwgUXVhbGl0YXRpdmUgfCAzOCB8CiAgfCBEZXNpZ24gICAgfCBNUyBNZWRpYSBTbGFudHMgfCBFeHBlcmltZW50YWwgVW5pdCB8IDExNCB8CiAgfCBSZXNwb25zZSAgfCBQbGFudCBUaXNzdWUgV2VpZ2h0IHwgT2JzZXJ2YXRpb25hbCBVbml0IHwgNDU2IHwKICB8UmVzcG9uc2UgfCBEcnkgUm9vdCBXZWlnaHQgKERSKSB8IFZhcmlhYmxlIHwgMTE0IHwgCiAgfCBSZXNwb25zZSB8IERyeSBTaG9vdCBXZWlnaHQgKERTKSB8IFZhcmlhYmxlIHwgMTE0IHwKICB8IFJlc3BvbnNlIHwgV2V0IFJvb3QgV2VpZ2h0IChXUikgfCBWYXJpYWJsZSB8IDExNCB8IAogIHwgUmVzcG9uc2UgfCBXZXQgU2hvb3QgV2VpZ2h0IChXUykgfCBWYXJpYWJsZSB8IDExNCB8CgojIyMgMy4zLjEuIERyeSBSb290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2YgZHJ5IHJvb3QgZGF0YQpsbV9zZXRfMy4zX0RSIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF8zLjNfRFIpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMy4zX0RSLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgMy4zLjEuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZQphbm92YShsbV9zZXRfMy4zX0RSKQpgYGAKCiMjIyMgMy4zLjEuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpsc21fczMuMy5kdW4uRFIgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF8zLjNfRFIsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9MzcpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczMuMy5kdW4uRFIsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3MzLjMuZHVuLkRSLmNzdiIpCmBgYAoKIyMjIyAzLjMuMS4gLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfMy4zX0RSLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy4zX0RSLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBEcnkgUm9vdCBXZWlnaHQiLCB4bGFiID0gIk1lYW4gV2VpZ2h0IChtZykiLCB5bGFiID0gIklzb2xhdGUgSUQiKQpgYGAKCiMjIyMgMy4zLjEuIC0gQ0xEIC0gTWVhbiBFc3RpbWF0ZSBEaWZmZXJlbmNlcyB0byBDb250cm9sCgpDb21wYWN0IExldHRlciBEaXNwbGF5IG9mIGVzdGltYXRlcyBmb3IgRHJ5IFJvb3QgTWVhbiB3ZWlnaHQgKG1nKSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBsYW50cyB0aGF0IHdlcmUgaW5vY3VsYXRlZCB3aXRoIGEgbXVjaWxhZ2UgaXNvbGF0ZXMgYW5kIHRoZSBub24taW5vY3VsYXRlZCBjb250cm9sLgoKYGBge3J9CnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzMuM19EUiwgdHJ0LnZzLmN0cmx+aXNvbGF0ZSxyZWY9MzcpJGNvbnRyYXN0cywgYWxwaGE9MC4xKSwgbWFpbj0iTWVhbiBEcnkgUm9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IEhlcmUsIHRoZSBjb250cm9sIG1lYW4gaXMgbXVjaCBoaWdoZXIgdGhhbiBtb3N0IG9mIHRoZSBpbm9jdWxhdGVkIHNhbXBsZXMuCgojIyMgMy4zLjIuIERyeSBTaG9vdCBXZWlnaHQKCmBgYHtyLCBmaWcud2lkdGg9MTB9CiMgbGluZWFyIG1vZGVsIG9mIGRyeSBzaG9vdCBkYXRhCmxtX3NldF8zLjNfRFMgPC0gbG0obWcgfiAxICsgaXNvbGF0ZSwgc2V0XzMuM19EUykKb3AgPSBwYXIobWZyb3c9YygxLDIpKQpwbG90KGxtX3NldF8zLjNfRFMsIHdoaWNoID0gYygyLDMpKQpwYXIob3ApCmBgYAoKIyMjIyAzLjMuMi4gLSBBbm92YQoKYGBge3J9CiMgYXNzZXNzIHZhcmlhbmNlCmFub3ZhKGxtX3NldF8zLjNfRFMpCmBgYAoKIyMjIyAzLjMuMi4gLSBMU01lYW5zIC0gRHVubmV0dAoKYGBge3J9CmxzbV9zMy4zLmR1bi5EUyA8LSBzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzMuM19EUywgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj0zNykkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKd3JpdGUuY3N2KGxzbV9zMy4zLmR1bi5EUywgIi4vbHNtZWFuc19zdW1tYXJ5X3RhYmxlcy9sc21fczMuMy5kdW4uRFMuY3N2IikKYGBgCgojIyMjIDMuMy4yLiAtIENMRCAtIChQYWlyd2lzZSBieSBpc29sYXRlKQoKYGBge3J9CkNMRChsc21lYW5zKGxtX3NldF8zLjNfRFMsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF8zLjNfRFMsIH5pc29sYXRlKSwgYWxwaGE9MC4xKSwgbWFpbj0iQWxsIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBNZWFuIERyeSBTaG9vdCBXZWlnaHQiLCB4bGFiID0gIk1lYW4gV2VpZ2h0IChtZykiLCB5bGFiID0gIklzb2xhdGUgSUQiKQpgYGAKCiMjIyMgMy4zLjIuIC0gQ0xEIC0gTWVhbiBFc3RpbWF0ZSBEaWZmZXJlbmNlcyB0byBDb250cm9sCgpDb21wYWN0IExldHRlciBEaXNwbGF5IG9mIGVzdGltYXRlcyBmb3IgRHJ5IFNob290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbC4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8zLjNfRFMsIHRydC52cy5jdHJsfmlzb2xhdGUscmVmPTM3KSRjb250cmFzdHMsIGFscGhhPTAuMSksIG1haW49Ik1lYW4gRHJ5IFNob290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbCIsIHhsYWIgPSAiRGlmZmVyZW5jZSBvZiBNZWFuIEVzdGltYXRlcyAobWcpIiwgeWxhYiA9ICJDb250cmFzdHMiKQpgYGAKCj4gQWdhaW4sIHdlIGhhdmUgbmVnYXRpdmUgZGlmZmVyZW5jZXMgaW4gbWVhbiB3ZWlnaHQgcmVsYXRpdmUgdG8gdGhlIGNvbnRyb2wuCgojIyMgMy4zLjMuIFdldCBSb290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2Ygd2V0IHJvb3QgZGF0YQpsbV9zZXRfMy4zX1dSIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF8zLjNfV1IpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMy4zX1dSLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgMy4zLjMuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZQphbm92YShsbV9zZXRfMy4zX1dSKQpgYGAKCiMjIyMgMy4zLjMuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpsc21fczMuMy5kdW4uV1IgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF8zLjNfV1IsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9MzcpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczMuMy5kdW4uV1IsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3MzLjMuZHVuLldSLmNzdiIpCmBgYAoKIyMjIyAzLjMuMy4gLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfMy4zX1dSLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy4zX1dSLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBXZXQgUm9vdCBXZWlnaHQiLCB4bGFiID0gIk1lYW4gV2VpZ2h0IChtZykiLCB5bGFiID0gIklzb2xhdGUgSUQiKQpgYGAKCiMjIyMgMy4zLjMuIC0gQ0xEIC0gTWVhbiBFc3RpbWF0ZSBEaWZmZXJlbmNlcyB0byBDb250cm9sCgpDb21wYWN0IExldHRlciBEaXNwbGF5IG9mIGVzdGltYXRlcyBmb3IgV2V0IFJvb3QgTWVhbiB3ZWlnaHQgKG1nKSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBsYW50cyB0aGF0IHdlcmUgaW5vY3VsYXRlZCB3aXRoIGEgbXVjaWxhZ2UgaXNvbGF0ZXMgYW5kIHRoZSBub24taW5vY3VsYXRlZCBjb250cm9sLgoKYGBge3J9CnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzMuM19XUiwgdHJ0LnZzLmN0cmx+aXNvbGF0ZSxyZWY9MzcpJGNvbnRyYXN0cywgYWxwaGE9MC4xKSwgbWFpbj0iTWVhbiBXZXQgUm9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IEVmZmVjdCBvZiBkYXRhIGRpc3RyaWJ1dGlvbiwgb3IgY29udHJvbCBpcyBiYWQsIG9yIHRoZSBpc29sYXRlcyBoaW5kZXIgZ3Jvd3RoPwoKIyMjIDMuMy40LiBXZXQgU2hvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiB3ZXQgc2hvb3QgZGF0YQpsbV9zZXRfMy4zX1dTIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF8zLjNfV1MpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMy4zX1dTLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgMy4zLjQuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZQphbm92YShsbV9zZXRfMy4zX1dTKQpgYGAKCiMjIyMgMy4zLjQuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpsc21fczMuMy5kdW4uV1MgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF8zLjNfV1MsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9MzcpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczMuMy5kdW4uV1MsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3MzLjMuZHVuLldTLmNzdiIpCmBgYAoKIyMjIyAzLjMuNC4gLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfMy4zX1dTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy4zX1dTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBXZXQgU2hvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDMuMy40LiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIFdldCBTaG9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy4zX1dTLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0zNykkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIFdldCBTaG9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IFRoZSBjb250cm9sIG1lYW4gd2VpZ2h0IGlzIG11Y2ggaGlnaGVyIHRoYW4gaW5vY3VsYXRlZCBwbGFudCBtZWFuIHdlaWdodHMgZm9yIHdldCBzaG9vdC4KCiMjIEJhdGNoIDMuNAoKYGBge3J9CiMgYW5hbHl6ZSBzZXQgMy40IGRhdGEKc3RyKHNldF8zLjQpCgojc3Vic2V0IGJ5IHNhbXBsZSB0eXBlCgpzZXRfMy40X0RSIDwtIGZpbHRlcihzZXRfMy40LCBzYW1wbGUgPT0gIkRSIikKc2V0XzMuNF9EUyA8LSBmaWx0ZXIoc2V0XzMuNCwgc2FtcGxlID09ICJEUyIpCnNldF8zLjRfV1IgPC0gZmlsdGVyKHNldF8zLjQsIHNhbXBsZSA9PSAiV1IiKQpzZXRfMy40X1dTIDwtIGZpbHRlcihzZXRfMy40LCBzYW1wbGUgPT0gIldTIikKCmBgYAoKKipFeHBlcmltZW50YWwgRGVzaWduIFRhYmxlKioKICAKICB8IFN0cnVjdHVyZSB8IEZhY3RvciB8IFR5cGUgfCAjIGxldmVscyB8CiAgfC0tLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS0tfAogIHwgVHJlYXRtZW50IHwgSXNvbGF0ZSB8IFF1YWxpdGF0aXZlIHwgMzggfAogIHwgRGVzaWduICAgIHwgTVMgTWVkaWEgU2xhbnRzIHwgRXhwZXJpbWVudGFsIFVuaXQgfCAxMTQgfAogIHwgUmVzcG9uc2UgIHwgUGxhbnQgVGlzc3VlIFdlaWdodCB8IE9ic2VydmF0aW9uYWwgVW5pdCB8IDQ1NiB8CiAgfFJlc3BvbnNlIHwgRHJ5IFJvb3QgV2VpZ2h0IChEUikgfCBWYXJpYWJsZSB8IDExNCB8IAogIHwgUmVzcG9uc2UgfCBEcnkgU2hvb3QgV2VpZ2h0IChEUykgfCBWYXJpYWJsZSB8IDExNCB8CiAgfCBSZXNwb25zZSB8IFdldCBSb290IFdlaWdodCAoV1IpIHwgVmFyaWFibGUgfCAxMTQgfCAKICB8IFJlc3BvbnNlIHwgV2V0IFNob290IFdlaWdodCAoV1MpIHwgVmFyaWFibGUgfCAxMTQgfAoKIyMjIDMuNC4xLiBEcnkgUm9vdCBXZWlnaHQKCmBgYHtyLCBmaWcud2lkdGg9MTB9CiMgbGluZWFyIG1vZGVsIG9mIGRyeSByb290IGRhdGEKbG1fc2V0XzMuNF9EUiA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfMy40X0RSKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzMuNF9EUiwgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDMuNC4xLiAtIEFub3ZhCgpgYGB7cn0KIyBhc3Nlc3MgdmFyaWFuY2UKYW5vdmEobG1fc2V0XzMuNF9EUikKYGBgCgojIyMjIDMuNC4xLiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3MzLjQuZHVuLkRSIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfMy40X0RSLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTM2KSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3MzLjQuZHVuLkRSLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zMy40LmR1bi5EUi5jc3YiKQpgYGAKCiMjIyMgMy40LjEuIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzMuNF9EUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzMuNF9EUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpLCBtYWluPSJBbGwgcGFpcndpc2UgY29tcGFyaXNvbnMgZm9yIE1lYW4gRHJ5IFJvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDMuNC4xLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBSb290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbC4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8zLjRfRFIsIHRydC52cy5jdHJsfmlzb2xhdGUscmVmPTM2KSRjb250cmFzdHMsIGFscGhhPTAuMSksIG1haW49Ik1lYW4gRHJ5IFJvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKPiBUaGVyZSBhcmUgbm90IHNpZ25pZmljYW50IHBvc2l0aXZlIGRpZmZlcmVuY2VzIGJldHdlZW4gbWVhbiBlc3RpbWF0ZXMgZm9yIGlub2N1bGF0ZWQgcGxhbnRzIGFuZCB0aGUgY29udHJvbCBwbGFudHMgd2l0aCByZXNwZWN0IHRvIGRyeSByb290IHdlaWdodCBtZWFzdXJlbWVudHMgaW4gYmF0Y2ggMy40LgoKIyMjIDMuNC4yLiBEcnkgU2hvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiBkcnkgc2hvb3QgZGF0YQpsbV9zZXRfMy40X0RTIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF8zLjRfRFMpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMy40X0RTLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgMy40LjIuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZQphbm92YShsbV9zZXRfMy40X0RTKQpgYGAKCiMjIyMgMy40LjIuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpsc21fczMuNC5kdW4uRFMgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF8zLjRfRFMsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9MzYpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczMuNC5kdW4uRFMsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3MzLjQuZHVuLkRTLmNzdiIpCmBgYAoKIyMjIyAzLjQuMi4gLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfMy40X0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy40X0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBEcnkgU2hvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDMuNC4yLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBTaG9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy40X0RTLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0zNikkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIERyeSBTaG9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IEFsbCBpc29sYXRlcyBoYXZlIG1lYW4gZXN0aW1hdGVzIGZvciBkcnkgc2hvb3QgbWFzcyB3aXRoIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIHRoYXQgb3ZlcmxhcCB3aXRoIHRob3NlIG9mIHRoZSBjb250cm9sIGdyb3VwLgoKIyMjIDMuNC4zLiBXZXQgUm9vdCBXZWlnaHQKCmBgYHtyLCBmaWcud2lkdGg9MTB9CiMgbGluZWFyIG1vZGVsIG9mIHdldCByb290IGRhdGEKbG1fc2V0XzMuNF9XUiA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfMy40X1dSKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzMuNF9XUiwgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDMuNC4zLiAtIEFub3ZhCgpgYGB7cn0KIyBhc3Nlc3MgdmFyaWFuY2UKYW5vdmEobG1fc2V0XzMuNF9XUikKYGBgCgojIyMjIDMuNC4zLiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3MzLjQuZHVuLldSIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfMy40X1dSLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTM2KSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3MzLjQuZHVuLldSLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zMy40LmR1bi5XUi5jc3YiKQpgYGAKCiMjIyMgMy40LjMuIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzMuNF9XUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzMuNF9XUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpLCBtYWluPSJBbGwgcGFpcndpc2UgY29tcGFyaXNvbnMgZm9yIE1lYW4gV2V0IFJvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDMuNC4zLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIFdldCBSb290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbC4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF8zLjRfV1IsIHRydC52cy5jdHJsfmlzb2xhdGUscmVmPTM2KSRjb250cmFzdHMsIGFscGhhPTAuMSksIG1haW49Ik1lYW4gV2V0IFJvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKPiBObyBzaWduaWZpY2FudCBlZmZlY3Qgb2YgaW5vY3VsYXRpb24gdHJlYXRtZW50IG9uIG1lYW4gd2V0IHJvb3Qgd2VpZ2h0IGZvciBiYXRjaCAzLjQgd2FzIG9ic2VydmVkLgoKIyMjIDMuNC40LiBXZXQgU2hvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiB3ZXQgc2hvb3QgZGF0YQpsbV9zZXRfMy40X1dTIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF8zLjRfV1MpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMy40X1dTLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgMy40LjQuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZQphbm92YShsbV9zZXRfMy40X1dTKQpgYGAKCiMjIyMgMy40LjQuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpsc21fczMuNC5kdW4uV1MgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF8zLjRfV1MsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9MzYpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczMuNC5kdW4uV1MsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3MzLjQuZHVuLldTLmNzdiIpCmBgYAoKIyMjIyAzLjQuNC4gLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfMy40X1dTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy40X1dTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBXZXQgU2hvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDMuNC40LiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIFdldCBTaG9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy40X1dTLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0zNikkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIFdldCBTaG9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IE5vIHNpZ25pZmljYW50IGVmZmVjdCBvZiBpbm9jdWxhdGlvbiB0cmVhdG1lbnQgb24gbWVhbiB3ZXQgc2hvb3Qgd2VpZ2h0IGZvciBiYXRjaCAzLjQgd2FzIG9ic2VydmVkLiBDb25maWRlbmNlIGludGVydmFscyBmb3IgbWVhbiBlc3RpbWF0ZXMgb2YgaXNvbGF0ZXMgdGhhdCBwcm9kdWNlZCBwb3NpdGl2ZSB3ZWlnaHQgZGlmZmVyZW5jZXMgcmVsYXRpdmUgdG8gdGhlIGNvbnRyb2wgYXJlIGhpZ2hseSBvdmVybGFwcGluZy4KCiMjIEJhdGNoIDMuNQoKYGBge3J9CiMgYW5hbHl6ZSBzZXQgMy41IGRhdGEKc3RyKHNldF8zLjUpCgojc3Vic2V0IGJ5IHNhbXBsZSB0eXBlCgpzZXRfMy41X0RSIDwtIGZpbHRlcihzZXRfMy41LCBzYW1wbGUgPT0gIkRSIikKc2V0XzMuNV9EUyA8LSBmaWx0ZXIoc2V0XzMuNSwgc2FtcGxlID09ICJEUyIpCnNldF8zLjVfV1IgPC0gZmlsdGVyKHNldF8zLjUsIHNhbXBsZSA9PSAiV1IiKQpzZXRfMy41X1dTIDwtIGZpbHRlcihzZXRfMy41LCBzYW1wbGUgPT0gIldTIikKCmBgYAoKKipFeHBlcmltZW50YWwgRGVzaWduIFRhYmxlKioKICAKICB8IFN0cnVjdHVyZSB8IEZhY3RvciB8IFR5cGUgfCAjIGxldmVscyB8CiAgfC0tLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS0tfAogIHwgVHJlYXRtZW50IHwgSXNvbGF0ZSB8IFF1YWxpdGF0aXZlIHwgMjYgfAogIHwgRGVzaWduICAgIHwgTVMgTWVkaWEgU2xhbnRzIHwgRXhwZXJpbWVudGFsIFVuaXQgfCA3OCB8CiAgfCBSZXNwb25zZSAgfCBQbGFudCBUaXNzdWUgV2VpZ2h0IHwgT2JzZXJ2YXRpb25hbCBVbml0IHwgMzEyIHwKICB8UmVzcG9uc2UgfCBEcnkgUm9vdCBXZWlnaHQgKERSKSB8IFZhcmlhYmxlIHwgNzggfCAKICB8IFJlc3BvbnNlIHwgRHJ5IFNob290IFdlaWdodCAoRFMpIHwgVmFyaWFibGUgfCA3OCB8CiAgfCBSZXNwb25zZSB8IFdldCBSb290IFdlaWdodCAoV1IpIHwgVmFyaWFibGUgfCA3OCB8IAogIHwgUmVzcG9uc2UgfCBXZXQgU2hvb3QgV2VpZ2h0IChXUykgfCBWYXJpYWJsZSB8IDc4IHwKCiMjIyAzLjUuMS4gRHJ5IFJvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiBkcnkgcm9vdCBkYXRhCmxtX3NldF8zLjVfRFIgPC0gbG0obWcgfiAxICsgaXNvbGF0ZSwgc2V0XzMuNV9EUikKb3AgPSBwYXIobWZyb3c9YygxLDIpKQpwbG90KGxtX3NldF8zLjVfRFIsIHdoaWNoID0gYygyLDMpKQpwYXIob3ApCmBgYAoKIyMjIyAzLjUuMS4gLSBBbm92YQoKYGBge3J9CiMgYXNzZXNzIHZhcmlhbmNlCmFub3ZhKGxtX3NldF8zLjVfRFIpCmBgYAoKIyMjIyAzLjUuMS4gLSBMU01lYW5zIC0gRHVubmV0dAoKYGBge3J9CmxzbV9zMy41LmR1bi5EUiA8LSBzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzMuNV9EUiwgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj0yMikkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKd3JpdGUuY3N2KGxzbV9zMy41LmR1bi5EUiwgIi4vbHNtZWFuc19zdW1tYXJ5X3RhYmxlcy9sc21fczMuNS5kdW4uRFIuY3N2IikKYGBgCgojIyMjIDMuNS4xLiAtIENMRCAtIChQYWlyd2lzZSBieSBpc29sYXRlKQoKYGBge3J9CkNMRChsc21lYW5zKGxtX3NldF8zLjVfRFIsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF8zLjVfRFIsIH5pc29sYXRlKSwgYWxwaGE9MC4xKSwgbWFpbj0iQWxsIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBNZWFuIERyeSBSb290IFdlaWdodCIsIHhsYWIgPSAiTWVhbiBXZWlnaHQgKG1nKSIsIHlsYWIgPSAiSXNvbGF0ZSBJRCIpCmBgYAoKIyMjIyAzLjUuMS4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wKCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBEcnkgUm9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy41X0RSLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0yMikkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIERyeSBSb290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbCIsIHhsYWIgPSAiRGlmZmVyZW5jZSBvZiBNZWFuIEVzdGltYXRlcyAobWcpIiwgeWxhYiA9ICJDb250cmFzdHMiKQpgYGAKCj4gTm8gc2lnbmlmaWNhbnQgZWZmZWN0LgoKIyMjIDMuNS4yLiBEcnkgU2hvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiBkcnkgc2hvb3QgZGF0YQpsbV9zZXRfMy41X0RTIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF8zLjVfRFMpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfMy41X0RTLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgMy41LjIuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZQphbm92YShsbV9zZXRfMy41X0RTKQpgYGAKCiMjIyMgMy41LjIuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpsc21fczMuNS5kdW4uRFMgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF8zLjVfRFMsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9MjIpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczMuNS5kdW4uRFMsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3MzLjUuZHVuLkRTLmNzdiIpCmBgYAoKIyMjIyAzLjUuMi4gLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfMy41X0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy41X0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBEcnkgU2hvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDMuNS4yLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBTaG9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy41X0RTLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0yMikkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIERyeSBTaG9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IE5vIHNpZ25pZmljYW50IHBvc2l0aXZlIGVmZmVjdHMgd2VyZSBvYnNlcnZlZCBmb3IgbWVhbiBkcnkgc2hvb3Qgd2VpZ2h0IGluIGJhdGNoIDMuNS4KCiMjIyAzLjUuMy4gV2V0IFJvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiB3ZXQgcm9vdCBkYXRhCmxtX3NldF8zLjVfV1IgPC0gbG0obWcgfiAxICsgaXNvbGF0ZSwgc2V0XzMuNV9XUikKb3AgPSBwYXIobWZyb3c9YygxLDIpKQpwbG90KGxtX3NldF8zLjVfV1IsIHdoaWNoID0gYygyLDMpKQpwYXIob3ApCmBgYAoKIyMjIyAzLjUuMy4gLSBBbm92YQoKYGBge3J9CiMgYXNzZXNzIHZhcmlhbmNlCmFub3ZhKGxtX3NldF8zLjVfV1IpCmBgYAoKIyMjIyAzLjUuMy4gLSBMU01lYW5zIC0gRHVubmV0dAoKYGBge3J9CmxzbV9zMy41LmR1bi5XUiA8LSBzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzMuNV9XUiwgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj0yMikkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKd3JpdGUuY3N2KGxzbV9zMy41LmR1bi5XUiwgIi4vbHNtZWFuc19zdW1tYXJ5X3RhYmxlcy9sc21fczMuNS5kdW4uV1IuY3N2IikKYGBgCgojIyMjIDMuNS4zLiAtIENMRCAtIChQYWlyd2lzZSBieSBpc29sYXRlKQoKYGBge3J9CkNMRChsc21lYW5zKGxtX3NldF8zLjVfV1IsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF8zLjVfV1IsIH5pc29sYXRlKSwgYWxwaGE9MC4xKSwgbWFpbj0iQWxsIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBNZWFuIFdldCBSb290IFdlaWdodCIsIHhsYWIgPSAiTWVhbiBXZWlnaHQgKG1nKSIsIHlsYWIgPSAiSXNvbGF0ZSBJRCIpCmBgYAoKIyMjIyAzLjUuMy4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wKCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBXZXQgUm9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfMy41X1dSLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0yMikkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIFdldCBSb290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbCIsIHhsYWIgPSAiRGlmZmVyZW5jZSBvZiBNZWFuIEVzdGltYXRlcyAobWcpIiwgeWxhYiA9ICJDb250cmFzdHMiKQpgYGAKCj4gTm8gc2lnbmlmaWNhbnQgcG9zaXRpdmUgZWZmZWN0cyBvYnNlcnZlZCBmb3Igd2V0IHJvb3Qgd2VpZ2h0IG9mIGJhdGNoIDMuNS4KCiMjIyAzLjUuNC4gV2V0IFNob290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2Ygd2V0IHNob290IGRhdGEKbG1fc2V0XzMuNV9XUyA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfMy41X1dTKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzMuNV9XUywgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDMuNS40LiAtIEFub3ZhCgpgYGB7cn0KIyBhc3Nlc3MgdmFyaWFuY2UKYW5vdmEobG1fc2V0XzMuNV9XUykKYGBgCgojIyMjIDMuNS40LiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3MzLjUuZHVuLldTIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfMy41X1dTLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTIyKSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3MzLjUuZHVuLldTLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zMy41LmR1bi5XUy5jc3YiKQpgYGAKCiMjIyMgMy41LjQuIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzMuNV9XUywgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzMuNV9XUywgfmlzb2xhdGUpLCBhbHBoYT0wLjEpLCBtYWluPSJBbGwgcGFpcndpc2UgY29tcGFyaXNvbnMgZm9yIE1lYW4gV2V0IFNob290IFdlaWdodCIsIHhsYWIgPSAiTWVhbiBXZWlnaHQgKG1nKSIsIHlsYWIgPSAiSXNvbGF0ZSBJRCIpCmBgYAoKIyMjIyAzLjUuNC4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wKCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBXZXQgU2hvb3QgTWVhbiB3ZWlnaHQgKG1nKSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBsYW50cyB0aGF0IHdlcmUgaW5vY3VsYXRlZCB3aXRoIGEgbXVjaWxhZ2UgaXNvbGF0ZXMgYW5kIHRoZSBub24taW5vY3VsYXRlZCBjb250cm9sLgoKYGBge3J9CnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzMuNV9XUywgdHJ0LnZzLmN0cmx+aXNvbGF0ZSxyZWY9MjIpJGNvbnRyYXN0cywgYWxwaGE9MC4xKSwgbWFpbj0iTWVhbiBXZXQgU2hvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKPiBObyBzaWduaWZpY2FudCBwb3NpdGl2ZSBlZmZlY3Qgd2FzIG9ic2VydmVkIGZvciBXZXQgU2hvb3Qgd2VpZ2h0IGluIGJhdGNoIDMuNSBpbm9jdWxhdGlvbnMuCgojIyBCYXRjaCA0LjEKCmBgYHtyfQojIGFuYWx5emUgc2V0IDQuMSBkYXRhCnN0cihzZXRfNC4xKQoKI3N1YnNldCBieSBzYW1wbGUgdHlwZQoKc2V0XzQuMV9EUiA8LSBmaWx0ZXIoc2V0XzQuMSwgc2FtcGxlID09ICJEUiIpCnNldF80LjFfRFMgPC0gZmlsdGVyKHNldF80LjEsIHNhbXBsZSA9PSAiRFMiKQpzZXRfNC4xX1dSIDwtIGZpbHRlcihzZXRfNC4xLCBzYW1wbGUgPT0gIldSIikKc2V0XzQuMV9XUyA8LSBmaWx0ZXIoc2V0XzQuMSwgc2FtcGxlID09ICJXUyIpCgpgYGAKCioqRXhwZXJpbWVudGFsIERlc2lnbiBUYWJsZSoqCiAgCiAgfCBTdHJ1Y3R1cmUgfCBGYWN0b3IgfCBUeXBlIHwgIyBsZXZlbHMgfAogIHwtLS0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS18LS0tLS0tLS0tLXwKICB8IFRyZWF0bWVudCB8IElzb2xhdGUgfCBRdWFsaXRhdGl2ZSB8IDM5IHwKICB8IERlc2lnbiAgICB8IE1TIE1lZGlhIFNsYW50cyB8IEV4cGVyaW1lbnRhbCBVbml0IHwgMTE3IHwKICB8IFJlc3BvbnNlICB8IFBsYW50IFRpc3N1ZSBXZWlnaHQgfCBPYnNlcnZhdGlvbmFsIFVuaXQgfCA0NjggfAogIHxSZXNwb25zZSB8IERyeSBSb290IFdlaWdodCAoRFIpIHwgVmFyaWFibGUgfCAxMTcgfCAKICB8IFJlc3BvbnNlIHwgRHJ5IFNob290IFdlaWdodCAoRFMpIHwgVmFyaWFibGUgfCAxMTcgfAogIHwgUmVzcG9uc2UgfCBXZXQgUm9vdCBXZWlnaHQgKFdSKSB8IFZhcmlhYmxlIHwgMTE3IHwgCiAgfCBSZXNwb25zZSB8IFdldCBTaG9vdCBXZWlnaHQgKFdTKSB8IFZhcmlhYmxlIHwgMTE3IHwKICAKIyMjIDQuMS4xLiBEcnkgUm9vdCBXZWlnaHQKCmBgYHtyLCBmaWcud2lkdGg9MTB9CiMgbGluZWFyIG1vZGVsIG9mIGRyeSByb290IGRhdGEKbG1fc2V0XzQuMV9EUiA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfNC4xX0RSKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzQuMV9EUiwgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDQuMS4xLiAtIEFub3ZhCgpgYGB7cn0KIyBhc3Nlc3MgdmFyaWFuY2UKYW5vdmEobG1fc2V0XzQuMV9EUikKYGBgCgojIyMjIDQuMS4xLiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3M0LjEuZHVuLkRSIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfNC4xX0RSLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTM3KSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3M0LjEuZHVuLkRSLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zNC4xLmR1bi5EUi5jc3YiKQpgYGAKCiMjIyMgNC4xLjEuIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzQuMV9EUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzQuMV9EUiwgfmlzb2xhdGUpLCBhbHBoYT0wLjEpLCBtYWluPSJBbGwgcGFpcndpc2UgY29tcGFyaXNvbnMgZm9yIE1lYW4gRHJ5IFJvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDQuMS4xLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBSb290IE1lYW4gd2VpZ2h0IChtZykgZGlmZmVyZW5jZXMgYmV0d2VlbiBwbGFudHMgdGhhdCB3ZXJlIGlub2N1bGF0ZWQgd2l0aCBhIG11Y2lsYWdlIGlzb2xhdGVzIGFuZCB0aGUgbm9uLWlub2N1bGF0ZWQgY29udHJvbC4KCmBgYHtyfQpwbG90KENMRChsc21lYW5zKGxtX3NldF80LjFfRFIsIHRydC52cy5jdHJsfmlzb2xhdGUscmVmPTM3KSRjb250cmFzdHMsIGFscGhhPTAuMSksIG1haW49Ik1lYW4gRHJ5IFJvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKPiBObyBzaWduaWZpY2FudCBwb3NpdGl2ZSBlZmZlY3Qgb2JzZXJ2ZWQgZm9yIGlub2N1bHVtIHRyZWF0bWVudCBiYXNlZCBvbiBkcnkgcm9vdCBtZWFzdXJlbWVudHMgb2YgYmF0Y2ggNC4xLgoKIyMjIDQuMS4yLiBEcnkgU2hvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiBkcnkgc2hvb3QgZGF0YQpsbV9zZXRfNC4xX0RTIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF80LjFfRFMpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfNC4xX0RTLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgNC4xLjIuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZQphbm92YShsbV9zZXRfNC4xX0RTKQpgYGAKCiMjIyMgNC4xLjIuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpsc21fczQuMS5kdW4uRFMgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF80LjFfRFMsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9MzcpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczQuMS5kdW4uRFMsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3M0LjEuZHVuLkRTLmNzdiIpCmBgYAoKIyMjIyA0LjEuMi4gLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfNC4xX0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfNC4xX0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBEcnkgU2hvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDQuMS4yLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBTaG9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfNC4xX0RTLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0zNykkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIERyeSBTaG9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IFRoZXJlIGFyZSBubyBzaWduaWZpY2FudCBwb3NpdGl2ZSBlZmZlY3RzIG9ic2VydmVkIGJhc2VkIG9uIG1lYXN1cmVtZW50cyBvZiBkcnkgc2hvb3Qgd2VpZ2h0IGZvciBwbGFudHMgaW5vY3VsYXRlZCB3aXRoIGlzb2xhdGVzIGluIGJhdGNoIDQuMS4KCiMjIyA0LjEuMy4gV2V0IFJvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiB3ZXQgcm9vdCBkYXRhCmxtX3NldF80LjFfV1IgPC0gbG0obWcgfiAxICsgaXNvbGF0ZSwgc2V0XzQuMV9XUikKb3AgPSBwYXIobWZyb3c9YygxLDIpKQpwbG90KGxtX3NldF80LjFfV1IsIHdoaWNoID0gYygyLDMpKQpwYXIob3ApCmBgYAoKIyMjIyA0LjEuMy4gLSBBbm92YQoKYGBge3J9CiMgYXNzZXNzIHZhcmlhbmNlCmFub3ZhKGxtX3NldF80LjFfV1IpCmBgYAoKIyMjIyA0LjEuMy4gLSBMU01lYW5zIC0gRHVubmV0dAoKYGBge3J9CmxzbV9zNC4xLmR1bi5XUiA8LSBzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzQuMV9XUiwgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj0zNykkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKd3JpdGUuY3N2KGxzbV9zNC4xLmR1bi5XUiwgIi4vbHNtZWFuc19zdW1tYXJ5X3RhYmxlcy9sc21fczQuMS5kdW4uV1IuY3N2IikKYGBgCgojIyMjIDQuMS4zLiAtIENMRCAtIChQYWlyd2lzZSBieSBpc29sYXRlKQoKYGBge3J9CkNMRChsc21lYW5zKGxtX3NldF80LjFfV1IsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF80LjFfV1IsIH5pc29sYXRlKSwgYWxwaGE9MC4xKSwgbWFpbj0iQWxsIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBNZWFuIFdldCBSb290IFdlaWdodCIsIHhsYWIgPSAiTWVhbiBXZWlnaHQgKG1nKSIsIHlsYWIgPSAiSXNvbGF0ZSBJRCIpCmBgYAoKIyMjIyA0LjEuMy4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wKCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBXZXQgUm9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfNC4xX1dSLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0zNykkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIFdldCBSb290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbCIsIHhsYWIgPSAiRGlmZmVyZW5jZSBvZiBNZWFuIEVzdGltYXRlcyAobWcpIiwgeWxhYiA9ICJDb250cmFzdHMiKQpgYGAKCj4gQ29udHJvbCBpcyB0aGUgaGlnaGVzdCBtZWFuIGVzdGltYXRlLiBBbGwgc2lnbmlmaWNhbnQgZWZmZWN0cyBhcmUgbmVnYXRpdmUgb24gbWVhbiB3ZXQgcm9vdCB3ZWlnaHQuCgojIyMgNC4xLjQuIFdldCBTaG9vdCBXZWlnaHQKCmBgYHtyLCBmaWcud2lkdGg9MTB9CiMgbGluZWFyIG1vZGVsIG9mIHdldCBzaG9vdCBkYXRhCmxtX3NldF80LjFfV1MgPC0gbG0obWcgfiAxICsgaXNvbGF0ZSwgc2V0XzQuMV9XUykKb3AgPSBwYXIobWZyb3c9YygxLDIpKQpwbG90KGxtX3NldF80LjFfV1MsIHdoaWNoID0gYygyLDMpKQpwYXIob3ApCmBgYAoKIyMjIyA0LjEuNC4gLSBBbm92YQoKYGBge3J9CiMgYXNzZXNzIHZhcmlhbmNlCmFub3ZhKGxtX3NldF80LjFfV1MpCmBgYAoKIyMjIyA0LjEuNC4gLSBMU01lYW5zIC0gRHVubmV0dAoKYGBge3J9CmxzbV9zNC4xLmR1bi5XUyA8LSBzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzQuMV9XUywgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj0zNykkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKd3JpdGUuY3N2KGxzbV9zNC4xLmR1bi5XUywgIi4vbHNtZWFuc19zdW1tYXJ5X3RhYmxlcy9sc21fczQuMS5kdW4uV1MuY3N2IikKYGBgCgojIyMjIDQuMS40LiAtIENMRCAtIChQYWlyd2lzZSBieSBpc29sYXRlKQoKYGBge3J9CkNMRChsc21lYW5zKGxtX3NldF80LjFfV1MsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF80LjFfV1MsIH5pc29sYXRlKSwgYWxwaGE9MC4xKSwgbWFpbj0iQWxsIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBNZWFuIFdldCBTaG9vdCBXZWlnaHQiLCB4bGFiID0gIk1lYW4gV2VpZ2h0IChtZykiLCB5bGFiID0gIklzb2xhdGUgSUQiKQpgYGAKCiMjIyMgNC4xLjQuIC0gQ0xEIC0gTWVhbiBFc3RpbWF0ZSBEaWZmZXJlbmNlcyB0byBDb250cm9sCgpDb21wYWN0IExldHRlciBEaXNwbGF5IG9mIGVzdGltYXRlcyBmb3IgV2V0IFJvb3QgTWVhbiB3ZWlnaHQgKG1nKSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBsYW50cyB0aGF0IHdlcmUgaW5vY3VsYXRlZCB3aXRoIGEgbXVjaWxhZ2UgaXNvbGF0ZXMgYW5kIHRoZSBub24taW5vY3VsYXRlZCBjb250cm9sLgoKYGBge3J9CnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzQuMV9XUywgdHJ0LnZzLmN0cmx+aXNvbGF0ZSxyZWY9MzcpJGNvbnRyYXN0cywgYWxwaGE9MC4xKSwgbWFpbj0iTWVhbiBXZXQgUm9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IEhpZ2hlc3QgbWVhbiBwcm9kdWNpbmcgaXNvbGF0ZSAoQkNXMjAwOTg0KSBoYXMgbG93ZXIgQ29uZmlkZW5jZSBsaW1pdCB0aGF0IG92ZXJsYXBzIHdpdGggdXBwZXIgb2YgY29udHJvbC4KCiMjIEJhdGNoIDQuMgoKYGBge3J9CiMgYW5hbHl6ZSBzZXQgNC4yIGRhdGEKc3RyKHNldF80LjIpCgojc3Vic2V0IGJ5IHNhbXBsZSB0eXBlCgpzZXRfNC4yX0RSIDwtIGZpbHRlcihzZXRfNC4yLCBzYW1wbGUgPT0gIkRSIikKc2V0XzQuMl9EUyA8LSBmaWx0ZXIoc2V0XzQuMiwgc2FtcGxlID09ICJEUyIpCnNldF80LjJfV1IgPC0gZmlsdGVyKHNldF80LjIsIHNhbXBsZSA9PSAiV1IiKQpzZXRfNC4yX1dTIDwtIGZpbHRlcihzZXRfNC4yLCBzYW1wbGUgPT0gIldTIikKCmBgYAoKKipFeHBlcmltZW50YWwgRGVzaWduIFRhYmxlKioKICAKICB8IFN0cnVjdHVyZSB8IEZhY3RvciB8IFR5cGUgfCAjIGxldmVscyB8CiAgfC0tLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS0tfAogIHwgVHJlYXRtZW50IHwgSXNvbGF0ZSB8IFF1YWxpdGF0aXZlIHwgMzMgfAogIHwgRGVzaWduICAgIHwgTVMgTWVkaWEgU2xhbnRzIHwgRXhwZXJpbWVudGFsIFVuaXQgfCA5OSB8CiAgfCBSZXNwb25zZSAgfCBQbGFudCBUaXNzdWUgV2VpZ2h0IHwgT2JzZXJ2YXRpb25hbCBVbml0IHwgMzk2IHwKICB8UmVzcG9uc2UgfCBEcnkgUm9vdCBXZWlnaHQgKERSKSB8IFZhcmlhYmxlIHwgOTkgfCAKICB8IFJlc3BvbnNlIHwgRHJ5IFNob290IFdlaWdodCAoRFMpIHwgVmFyaWFibGUgfCA5OSB8CiAgfCBSZXNwb25zZSB8IFdldCBSb290IFdlaWdodCAoV1IpIHwgVmFyaWFibGUgfCA5OSB8IAogIHwgUmVzcG9uc2UgfCBXZXQgU2hvb3QgV2VpZ2h0IChXUykgfCBWYXJpYWJsZSB8IDk5IHwKCiMjIyA0LjIuMS4gRHJ5IFJvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiBkcnkgcm9vdCBkYXRhCmxtX3NldF80LjJfRFIgPC0gbG0obWcgfiAxICsgaXNvbGF0ZSwgc2V0XzQuMl9EUikKb3AgPSBwYXIobWZyb3c9YygxLDIpKQpwbG90KGxtX3NldF80LjJfRFIsIHdoaWNoID0gYygyLDMpKQpwYXIob3ApCmBgYAoKIyMjIyA0LjIuMS4gLSBBbm92YQoKYGBge3J9CiMgYXNzZXNzIHZhcmlhbmNlCmFub3ZhKGxtX3NldF80LjJfRFIpCmBgYAoKIyMjIyA0LjIuMS4gLSBMU01lYW5zIC0gRHVubmV0dAoKYGBge3J9CmxzbV9zNC4yLmR1bi5EUiA8LSBzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzQuMl9EUiwgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj0yNCkkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKd3JpdGUuY3N2KGxzbV9zNC4yLmR1bi5EUiwgIi4vbHNtZWFuc19zdW1tYXJ5X3RhYmxlcy9sc21fczQuMi5kdW4uRFIuY3N2IikKYGBgCgojIyMjIDQuMi4xLiAtIENMRCAtIChQYWlyd2lzZSBieSBpc29sYXRlKQoKYGBge3J9CkNMRChsc21lYW5zKGxtX3NldF80LjJfRFIsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF80LjJfRFIsIH5pc29sYXRlKSwgYWxwaGE9MC4xKSwgbWFpbj0iQWxsIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBNZWFuIERyeSBSb290IFdlaWdodCIsIHhsYWIgPSAiTWVhbiBXZWlnaHQgKG1nKSIsIHlsYWIgPSAiSXNvbGF0ZSBJRCIpCmBgYAoKIyMjIyA0LjIuMS4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wKCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBEcnkgUm9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfNC4yX0RSLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0yNCkkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIERyeSBSb290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbCIsIHhsYWIgPSAiRGlmZmVyZW5jZSBvZiBNZWFuIEVzdGltYXRlcyAobWcpIiwgeWxhYiA9ICJDb250cmFzdHMiKQpgYGAKCj4gQkNXMjAxODE1IGFuZCBCQ1cyMDEwODQgaW5vY3VsYXRlZCBwbGFudHMgaGFkIGhpZ2hlciBtZWFuIGRyeSByb290IHdlaWdodHMgdGhhbiB0aGUgY29udHJvbCwgYW5kIHRoZSBjb25maWRlbmNlIGludGVydmFscyBmb3IgdGhlc2UgZXN0aW1hdGVzIGRvIG5vdCBvdmVybGFwIHdpdGggdGhvc2Ugb2YgdGhlIGNvbnRyb2wgbWVhbi4KCiMjIyA0LjIuMi4gRHJ5IFNob290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2YgZHJ5IHNob290IGRhdGEKbG1fc2V0XzQuMl9EUyA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfNC4yX0RTKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzQuMl9EUywgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDQuMi4yLiAtIEFub3ZhCgpgYGB7cn0KIyBhc3Nlc3MgdmFyaWFuY2UKYW5vdmEobG1fc2V0XzQuMl9EUykKYGBgCgojIyMjIDQuMi4yLiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3M0LjIuZHVuLkRTIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfNC4yX0RTLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTI0KSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3M0LjIuZHVuLkRTLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zNC4yLmR1bi5EUy5jc3YiKQpgYGAKCiMjIyMgNC4yLjIuIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzQuMl9EUywgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzQuMl9EUywgfmlzb2xhdGUpLCBhbHBoYT0wLjEpLCBtYWluPSJBbGwgcGFpcndpc2UgY29tcGFyaXNvbnMgZm9yIE1lYW4gRHJ5IFNob290IFdlaWdodCIsIHhsYWIgPSAiTWVhbiBXZWlnaHQgKG1nKSIsIHlsYWIgPSAiSXNvbGF0ZSBJRCIpCmBgYAoKIyMjIyA0LjIuMi4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wKCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBEcnkgU2hvb3QgTWVhbiB3ZWlnaHQgKG1nKSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBsYW50cyB0aGF0IHdlcmUgaW5vY3VsYXRlZCB3aXRoIGEgbXVjaWxhZ2UgaXNvbGF0ZXMgYW5kIHRoZSBub24taW5vY3VsYXRlZCBjb250cm9sLgoKYGBge3J9CnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzQuMl9EUywgdHJ0LnZzLmN0cmx+aXNvbGF0ZSxyZWY9MjQpJGNvbnRyYXN0cywgYWxwaGE9MC4xKSwgbWFpbj0iTWVhbiBEcnkgU2hvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKPiBObyBzaWduaWZpY2FudCBlZmZlY3Qgb2JzZXJ2ZWQgZm9yIGRyeSBzaG9vdCB3ZWlnaHQgb2YgYmF0Y2ggNC4yIGF0IGFuIGFscGhhIGxldmVsIG9mIDAuMSwgYnV0IGBCQ1cyMDE4MTVgIGlzIHZlcnkgY2xvc2UgdG8gaGF2aW5nIG5vbi1vdmVybGFwcGluZyBDSSBmb3IgdGhlIG1lYW4gZXN0aW1hdGUuCgojIyMgNC4yLjMuIFdldCBSb290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2Ygd2V0IHJvb3QgZGF0YQpsbV9zZXRfNC4yX1dSIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF80LjJfV1IpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfNC4yX1dSLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgNC4yLjMuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZQphbm92YShsbV9zZXRfNC4yX1dSKQpgYGAKCiMjIyMgNC4yLjMuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpsc21fczQuMi5kdW4uV1IgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF80LjJfV1IsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9MjQpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczQuMi5kdW4uV1IsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3M0LjIuZHVuLldSLmNzdiIpCmBgYAoKIyMjIyA0LjIuMy4gLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfNC4yX1dSLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfNC4yX1dSLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBXZXQgUm9vdCBXZWlnaHQiLCB4bGFiID0gIk1lYW4gV2VpZ2h0IChtZykiLCB5bGFiID0gIklzb2xhdGUgSUQiKQpgYGAKCiMjIyMgNC4yLjMuIC0gQ0xEIC0gTWVhbiBFc3RpbWF0ZSBEaWZmZXJlbmNlcyB0byBDb250cm9sCgpDb21wYWN0IExldHRlciBEaXNwbGF5IG9mIGVzdGltYXRlcyBmb3IgV2V0IFJvb3QgTWVhbiB3ZWlnaHQgKG1nKSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBsYW50cyB0aGF0IHdlcmUgaW5vY3VsYXRlZCB3aXRoIGEgbXVjaWxhZ2UgaXNvbGF0ZXMgYW5kIHRoZSBub24taW5vY3VsYXRlZCBjb250cm9sLgoKYGBge3J9CnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzQuMl9XUiwgdHJ0LnZzLmN0cmx+aXNvbGF0ZSxyZWY9MjQpJGNvbnRyYXN0cywgYWxwaGE9MC4xKSwgbWFpbj0iTWVhbiBXZXQgUm9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IGBCQ1cyMDEwODRgIGFuZCBgQkNXMjAxODE1YCBib3RoIGhhdmUgbWVhbiB3ZXQgcm9vdCB3ZWlnaHQgZXN0aW1hdGVzIGhpZ2hlciB0aGFuIHRoZSBjb250cm9sIGFuZCB0aGUgY29uZmlkZW5jZSBpbnRlcnZhbHMgZm9yIHRoZXNlIHR3byBpc29sYXRlJ3MgbWVhbiBlc3RpbWF0ZXMgZG8gbm90IG92ZXJsYXAgd2l0aCB0aG9zZSBvZiB0aGUgY29udHJvbC4KCiMjIyA0LjIuNC4gV2V0IFNob290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2Ygd2V0IHNob290IGRhdGEKbG1fc2V0XzQuMl9XUyA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfNC4yX1dTKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzQuMl9XUywgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDQuMi40LiAtIEFub3ZhCgpgYGB7cn0KIyBhc3Nlc3MgdmFyaWFuY2UKYW5vdmEobG1fc2V0XzQuMl9XUykKYGBgCgojIyMjIDQuMi40LiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3M0LjIuZHVuLldTIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfNC4yX1dTLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTI0KSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3M0LjIuZHVuLldTLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zNC4yLmR1bi5XUy5jc3YiKQpgYGAKCiMjIyMgNC4yLjQuIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzQuMl9XUywgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzQuMl9XUywgfmlzb2xhdGUpLCBhbHBoYT0wLjEpLCBtYWluPSJBbGwgcGFpcndpc2UgY29tcGFyaXNvbnMgZm9yIE1lYW4gV2V0IFNob290IFdlaWdodCIsIHhsYWIgPSAiTWVhbiBXZWlnaHQgKG1nKSIsIHlsYWIgPSAiSXNvbGF0ZSBJRCIpCmBgYAoKIyMjIyA0LjIuNC4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wKCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBXZXQgU2hvb3QgTWVhbiB3ZWlnaHQgKG1nKSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBsYW50cyB0aGF0IHdlcmUgaW5vY3VsYXRlZCB3aXRoIGEgbXVjaWxhZ2UgaXNvbGF0ZXMgYW5kIHRoZSBub24taW5vY3VsYXRlZCBjb250cm9sLgoKYGBge3J9CnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzQuMl9XUywgdHJ0LnZzLmN0cmx+aXNvbGF0ZSxyZWY9MjQpJGNvbnRyYXN0cywgYWxwaGE9MC4xKSwgbWFpbj0iTWVhbiBXZXQgU2hvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKPiBUaGVyZSBhcmUgbm8gcG9zaXRpdmUgZWZmZWN0cyBvYnNlcnZlZCBiYXNlZCBvbiBtZWFzdXJlbWVudHMgb2Ygd2V0IHNob290IHdlaWdodCBmb3IgcGxhbnRzIGlub2N1bGF0ZWQgd2l0aCBpc29sYXRlcyBpbiBiYXRjaCA0LjIgdGhhdCBoYXZlIG5vbi1vdmVybGFwcGluZyBjb25maWRlbmNlIGludGVydmFscyB3aXRoIHRob3NlIG9mIHRoZSBjb250cm9sLgoKIyMgQmF0Y2ggNC4zLgoKYGBge3J9CiMgYW5hbHl6ZSBzZXQgNC4zIGRhdGEKc3RyKHNldF80LjMpCgojc3Vic2V0IGJ5IHNhbXBsZSB0eXBlCgpzZXRfNC4zX0RSIDwtIGZpbHRlcihzZXRfNC4zLCBzYW1wbGUgPT0gIkRSIikKc2V0XzQuM19EUyA8LSBmaWx0ZXIoc2V0XzQuMywgc2FtcGxlID09ICJEUyIpCnNldF80LjNfV1IgPC0gZmlsdGVyKHNldF80LjMsIHNhbXBsZSA9PSAiV1IiKQpzZXRfNC4zX1dTIDwtIGZpbHRlcihzZXRfNC4zLCBzYW1wbGUgPT0gIldTIikKCmBgYAoKKipFeHBlcmltZW50YWwgRGVzaWduIFRhYmxlKioKICAKICB8IFN0cnVjdHVyZSB8IEZhY3RvciB8IFR5cGUgfCAjIGxldmVscyB8CiAgfC0tLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS0tfAogIHwgVHJlYXRtZW50IHwgSXNvbGF0ZSB8IFF1YWxpdGF0aXZlIHwgMzAgfAogIHwgRGVzaWduICAgIHwgTVMgTWVkaWEgU2xhbnRzIHwgRXhwZXJpbWVudGFsIFVuaXQgfCA5MCB8CiAgfCBSZXNwb25zZSAgfCBQbGFudCBUaXNzdWUgV2VpZ2h0IHwgT2JzZXJ2YXRpb25hbCBVbml0IHwgMzYwIHwKICB8UmVzcG9uc2UgfCBEcnkgUm9vdCBXZWlnaHQgKERSKSB8IFZhcmlhYmxlIHwgOTAgfCAKICB8IFJlc3BvbnNlIHwgRHJ5IFNob290IFdlaWdodCAoRFMpIHwgVmFyaWFibGUgfCA5MCB8CiAgfCBSZXNwb25zZSB8IFdldCBSb290IFdlaWdodCAoV1IpIHwgVmFyaWFibGUgfCA5MCB8IAogIHwgUmVzcG9uc2UgfCBXZXQgU2hvb3QgV2VpZ2h0IChXUykgfCBWYXJpYWJsZSB8IDkwIHwKCiMjIyA0LjMuMS4gRHJ5IFJvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiBkcnkgcm9vdCBkYXRhCmxtX3NldF80LjNfRFIgPC0gbG0obWcgfiAxICsgaXNvbGF0ZSwgc2V0XzQuM19EUikKb3AgPSBwYXIobWZyb3c9YygxLDIpKQpwbG90KGxtX3NldF80LjNfRFIsIHdoaWNoID0gYygyLDMpKQpwYXIob3ApCmBgYAoKIyMjIyA0LjMuMS4gLSBBbm92YQoKYGBge3J9CiMgYXNzZXNzIHZhcmlhbmNlCmFub3ZhKGxtX3NldF80LjNfRFIpCmBgYAoKIyMjIyA0LjMuMS4gLSBMU01lYW5zIC0gRHVubmV0dAoKYGBge3J9CmxzbV9zNC4zLmR1bi5EUiA8LSBzdW1tYXJ5KGxzbWVhbnMobG1fc2V0XzQuM19EUiwgdHJ0LnZzLmN0cmwgfmlzb2xhdGUsIHJlZj0yNSkkY29udHJhc3RzLCBpbmZlciA9IGMoVCxUKSkKd3JpdGUuY3N2KGxzbV9zNC4zLmR1bi5EUiwgIi4vbHNtZWFuc19zdW1tYXJ5X3RhYmxlcy9sc21fczQuMy5kdW4uRFIuY3N2IikKYGBgCgojIyMjIDQuMy4xLiAtIENMRCAtIChQYWlyd2lzZSBieSBpc29sYXRlKQoKYGBge3J9CkNMRChsc21lYW5zKGxtX3NldF80LjNfRFIsIH5pc29sYXRlKSwgYWxwaGE9MC4xKQpwbG90KENMRChsc21lYW5zKGxtX3NldF80LjNfRFIsIH5pc29sYXRlKSwgYWxwaGE9MC4xKSwgbWFpbj0iQWxsIHBhaXJ3aXNlIGNvbXBhcmlzb25zIGZvciBNZWFuIERyeSBSb290IFdlaWdodCIsIHhsYWIgPSAiTWVhbiBXZWlnaHQgKG1nKSIsIHlsYWIgPSAiSXNvbGF0ZSBJRCIpCmBgYAoKIyMjIyA0LjMuMS4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wKCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBEcnkgUm9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfNC4zX0RSLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0yNSkkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIERyeSBSb290IFdlaWdodCBEaWZmZXJlbmNlcyBvZiBJbm9jdWxhdGVkIFBsYW50cyB2cy4gQ29udHJvbCIsIHhsYWIgPSAiRGlmZmVyZW5jZSBvZiBNZWFuIEVzdGltYXRlcyAobWcpIiwgeWxhYiA9ICJDb250cmFzdHMiKQpgYGAKCj4gTm8gc2lnbmlmaWNhbnQgZWZmZWN0IG9ic2VydmVkIGZvciBkcnkgcm9vdCBtZWFzdXJlbWVudHMgaW4gYmF0Y2ggNC4zLgoKIyMjIDQuMy4yLiBEcnkgU2hvb3QgV2VpZ2h0CgpgYGB7ciwgZmlnLndpZHRoPTEwfQojIGxpbmVhciBtb2RlbCBvZiBkcnkgc2hvb3QgZGF0YQpsbV9zZXRfNC4zX0RTIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF80LjNfRFMpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfNC4zX0RTLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgNC4zLjIuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZQphbm92YShsbV9zZXRfNC4zX0RTKQpgYGAKCiMjIyMgNC4zLjIuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpsc21fczQuMy5kdW4uRFMgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF80LjNfRFMsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9MjUpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczQuMy5kdW4uRFMsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3M0LjMuZHVuLkRTLmNzdiIpCmBgYAoKIyMjIyA0LjMuMi4gLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfNC4zX0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfNC4zX0RTLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBEcnkgU2hvb3QgV2VpZ2h0IiwgeGxhYiA9ICJNZWFuIFdlaWdodCAobWcpIiwgeWxhYiA9ICJJc29sYXRlIElEIikKYGBgCgojIyMjIDQuMy4yLiAtIENMRCAtIE1lYW4gRXN0aW1hdGUgRGlmZmVyZW5jZXMgdG8gQ29udHJvbAoKQ29tcGFjdCBMZXR0ZXIgRGlzcGxheSBvZiBlc3RpbWF0ZXMgZm9yIERyeSBTaG9vdCBNZWFuIHdlaWdodCAobWcpIGRpZmZlcmVuY2VzIGJldHdlZW4gcGxhbnRzIHRoYXQgd2VyZSBpbm9jdWxhdGVkIHdpdGggYSBtdWNpbGFnZSBpc29sYXRlcyBhbmQgdGhlIG5vbi1pbm9jdWxhdGVkIGNvbnRyb2wuCgpgYGB7cn0KcGxvdChDTEQobHNtZWFucyhsbV9zZXRfNC4zX0RTLCB0cnQudnMuY3RybH5pc29sYXRlLHJlZj0yNSkkY29udHJhc3RzLCBhbHBoYT0wLjEpLCBtYWluPSJNZWFuIERyeSBTaG9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IE5vIHNpZ25pZmljYW50IGVmZmVjdCBvYnNlcnZlZCBmb3IgZHJ5IHNob290IG1lYXN1cmVtZW50cyBpbiBiYXRjaCA0LjMuCgojIyMgNC4zLjMuIFdldCBSb290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2Ygd2V0IHJvb3QgZGF0YQpsbV9zZXRfNC4zX1dSIDwtIGxtKG1nIH4gMSArIGlzb2xhdGUsIHNldF80LjNfV1IpCm9wID0gcGFyKG1mcm93PWMoMSwyKSkKcGxvdChsbV9zZXRfNC4zX1dSLCB3aGljaCA9IGMoMiwzKSkKcGFyKG9wKQpgYGAKCiMjIyMgNC4zLjMuIC0gQW5vdmEKCmBgYHtyfQojIGFzc2VzcyB2YXJpYW5jZQphbm92YShsbV9zZXRfNC4zX1dSKQpgYGAKCiMjIyMgNC4zLjMuIC0gTFNNZWFucyAtIER1bm5ldHQKCmBgYHtyfQpsc21fczQuMy5kdW4uV1IgPC0gc3VtbWFyeShsc21lYW5zKGxtX3NldF80LjNfV1IsIHRydC52cy5jdHJsIH5pc29sYXRlLCByZWY9MjUpJGNvbnRyYXN0cywgaW5mZXIgPSBjKFQsVCkpCndyaXRlLmNzdihsc21fczQuMy5kdW4uV1IsICIuL2xzbWVhbnNfc3VtbWFyeV90YWJsZXMvbHNtX3M0LjMuZHVuLldSLmNzdiIpCmBgYAoKIyMjIyA0LjMuMy4gLSBDTEQgLSAoUGFpcndpc2UgYnkgaXNvbGF0ZSkKCmBgYHtyfQpDTEQobHNtZWFucyhsbV9zZXRfNC4zX1dSLCB+aXNvbGF0ZSksIGFscGhhPTAuMSkKcGxvdChDTEQobHNtZWFucyhsbV9zZXRfNC4zX1dSLCB+aXNvbGF0ZSksIGFscGhhPTAuMSksIG1haW49IkFsbCBwYWlyd2lzZSBjb21wYXJpc29ucyBmb3IgTWVhbiBXZXQgUm9vdCBXZWlnaHQiLCB4bGFiID0gIk1lYW4gV2VpZ2h0IChtZykiLCB5bGFiID0gIklzb2xhdGUgSUQiKQpgYGAKCiMjIyMgNC4zLjMuIC0gQ0xEIC0gTWVhbiBFc3RpbWF0ZSBEaWZmZXJlbmNlcyB0byBDb250cm9sCgpDb21wYWN0IExldHRlciBEaXNwbGF5IG9mIGVzdGltYXRlcyBmb3IgV2V0IFJvb3QgTWVhbiB3ZWlnaHQgKG1nKSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBsYW50cyB0aGF0IHdlcmUgaW5vY3VsYXRlZCB3aXRoIGEgbXVjaWxhZ2UgaXNvbGF0ZXMgYW5kIHRoZSBub24taW5vY3VsYXRlZCBjb250cm9sLgoKYGBge3J9CnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzQuM19XUiwgdHJ0LnZzLmN0cmx+aXNvbGF0ZSxyZWY9MjUpJGNvbnRyYXN0cywgYWxwaGE9MC4xKSwgbWFpbj0iTWVhbiBXZXQgUm9vdCBXZWlnaHQgRGlmZmVyZW5jZXMgb2YgSW5vY3VsYXRlZCBQbGFudHMgdnMuIENvbnRyb2wiLCB4bGFiID0gIkRpZmZlcmVuY2Ugb2YgTWVhbiBFc3RpbWF0ZXMgKG1nKSIsIHlsYWIgPSAiQ29udHJhc3RzIikKYGBgCgo+IE5vIHNpZ25pZmljYW50IHBvc2l0aXZlIGVmZmVjdCBvYnNlcnZlZCBmb3Igd2V0IHJvb3QgbWVhc3VyZW1lbnRzIGluIGJhdGNoIDQuMy4KCiMjIyA0LjMuNC4gV2V0IFNob290IFdlaWdodAoKYGBge3IsIGZpZy53aWR0aD0xMH0KIyBsaW5lYXIgbW9kZWwgb2Ygd2V0IHNob290IGRhdGEKbG1fc2V0XzQuM19XUyA8LSBsbShtZyB+IDEgKyBpc29sYXRlLCBzZXRfNC4zX1dTKQpvcCA9IHBhcihtZnJvdz1jKDEsMikpCnBsb3QobG1fc2V0XzQuM19XUywgd2hpY2ggPSBjKDIsMykpCnBhcihvcCkKYGBgCgojIyMjIDQuMy40LiAtIEFub3ZhCgpgYGB7cn0KIyBhc3Nlc3MgdmFyaWFuY2UKYW5vdmEobG1fc2V0XzQuM19XUykKYGBgCgojIyMjIDQuMy40LiAtIExTTWVhbnMgLSBEdW5uZXR0CgpgYGB7cn0KbHNtX3M0LjMuZHVuLldTIDwtIHN1bW1hcnkobHNtZWFucyhsbV9zZXRfNC4zX1dTLCB0cnQudnMuY3RybCB+aXNvbGF0ZSwgcmVmPTI1KSRjb250cmFzdHMsIGluZmVyID0gYyhULFQpKQp3cml0ZS5jc3YobHNtX3M0LjMuZHVuLldTLCAiLi9sc21lYW5zX3N1bW1hcnlfdGFibGVzL2xzbV9zNC4zLmR1bi5XUy5jc3YiKQpgYGAKCiMjIyMgNC4zLjQuIC0gQ0xEIC0gKFBhaXJ3aXNlIGJ5IGlzb2xhdGUpCgpgYGB7cn0KQ0xEKGxzbWVhbnMobG1fc2V0XzQuM19XUywgfmlzb2xhdGUpLCBhbHBoYT0wLjEpCnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzQuM19XUywgfmlzb2xhdGUpLCBhbHBoYT0wLjEpLCBtYWluPSJBbGwgcGFpcndpc2UgY29tcGFyaXNvbnMgZm9yIE1lYW4gV2V0IFNob290IFdlaWdodCIsIHhsYWIgPSAiTWVhbiBXZWlnaHQgKG1nKSIsIHlsYWIgPSAiSXNvbGF0ZSBJRCIpCmBgYAoKIyMjIyA0LjMuNC4gLSBDTEQgLSBNZWFuIEVzdGltYXRlIERpZmZlcmVuY2VzIHRvIENvbnRyb2wKCkNvbXBhY3QgTGV0dGVyIERpc3BsYXkgb2YgZXN0aW1hdGVzIGZvciBXZXQgU2hvb3QgTWVhbiB3ZWlnaHQgKG1nKSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHBsYW50cyB0aGF0IHdlcmUgaW5vY3VsYXRlZCB3aXRoIGEgbXVjaWxhZ2UgaXNvbGF0ZXMgYW5kIHRoZSBub24taW5vY3VsYXRlZCBjb250cm9sLgoKYGBge3J9CnBsb3QoQ0xEKGxzbWVhbnMobG1fc2V0XzQuM19XUywgdHJ0LnZzLmN0cmx+aXNvbGF0ZSxyZWY9MjUpJGNvbnRyYXN0cywgYWxwaGE9MC4xKSwgbWFpbj0iTWVhbiBXZXQgU2hvb3QgV2VpZ2h0IERpZmZlcmVuY2VzIG9mIElub2N1bGF0ZWQgUGxhbnRzIHZzLiBDb250cm9sIiwgeGxhYiA9ICJEaWZmZXJlbmNlIG9mIE1lYW4gRXN0aW1hdGVzIChtZykiLCB5bGFiID0gIkNvbnRyYXN0cyIpCmBgYAoKPiBObyBzaWduaWZpY2FudCBwb3NpdGl2ZSBlZmZlY3Qgb2JzZXJ2ZWQgZm9yIGlub2N1bGF0aW9uIHRyZWF0bWVudHMgb24gd2V0IHNob290IG1lYXN1cmVtZW50cyBpbiBiYXRjaCA0LjMuCgoKCgojIyBTdW1tYXJ5Cgo+IFRoZSBpc29sYXRlcyBiZWxvdyB3ZXJlIGVhY2ggZm91bmQgdG8gaGF2ZSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGRpZmZlcmVuY2VzIGluIG1lYW4gd2VpZ2h0IGZvciB0aGUgc3BlY2lmaWVkIHJlc3BvbnNlIHZhcmlhYmxlcyB0aGF0IHdlcmUgbWVhc3VyZWQsIHdoZXJlIGluY2x1c2lvbiBpbiB0aGUgc3VtbWFyeSB0YWJsZSB3YXMgY29udGluZ2VudCB1cG9uIHRoZSBjb25maWRlbmNlIGludGVydmFscyBmb3IgdGhlIGVzdGltYXRlcyBiZWluZyBub24tb3ZlcmxhcHBpbmcgd2l0aCB0aG9zZSBvZiB0aGUgZXhwZXJpbWVudGFsIGNvbnRyb2wgZ3JvdXAgKGFscGhhIGxldmVsIG9mIDAuMSB3aXRoIGNvcnJlY3Rpb24gZm9yIG11bHRpcGxlIHRlc3RpbmcpLiAgCgp8IElzb2xhdGUgTGlzdCB8IEJhdGNoIHwgUmVzcG9uc2UgfCBEaWZmZXJlbmNlIGZyb20gQ29udHJvbCAobWcpIHwKfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CnwgQkNXMjAxODU4ICAgIHwgIDEgICAgfCBEcnkgUm9vdCAgfCAgICAgICAgICAgICA5LjcwICAgICAgICAgICAgfAp8IEJDVzIwMDcyNyAgICB8ICAxICAgIHwgRHJ5IFNob290IHwgICAgICAgICAgICAyMS4wOCAgICAgICAgICAgIHwKfCBCQ1cyMDA1NTYgICAgfCAgMSAgICB8IFdldCBSb290ICB8ICAgICAgICAgICAgOTUuODUgICAgICAgICAgICB8CnwgQkNXMjAwNTMzICAgIHwgIDEgICAgfCBXZXQgUm9vdCAgfCAgICAgICAgICAgIDkzLjAxICAgICAgICAgICAgfAp8IEJDVzIwMDgxMCAgICB8ICAyLjEgIHwgRHJ5IFNob290IHwgICAgICAgICAgICAyMS43NSAgICAgICAgICAgIHwKfCBCQ1cyMDA4MTAgICAgfCAgMi4xICB8IFdldCBSb290ICB8ICAgICAgICAgICAgNjAuOSAgICAgICAgICAgICB8CnwgQkNXMjAxODczICAgIHwgIDIuMSAgfCBXZXQgUm9vdCAgfCAgICAgICAgICAgIDcwLjQzICAgICAgICAgICAgfAp8IEJDVzIwMTgwOSAgICB8ICAyLjEgIHwgV2V0IFJvb3QgIHwgICAgICAgICAgICA2Mi4wMSAgICAgICAgICAgIHwKfCBCQ1cyMDE4NjQgICAgfCAgMi4xICB8IFdldCBSb290ICB8ICAgICAgICAgICAgNjUuNDMgICAgICAgICAgICB8CnwgQkNXMjAxODQ5ICAgIHwgIDIuMiAgfCBEcnkgUm9vdCAgfCAgICAgICAgICAgICA1LjAyICAgICAgICAgICAgfAp8IEJDVzIwMTg0OSAgICB8ICAyLjIgIHwgRHJ5IFNob290IHwgICAgICAgICAgICAyOS4zNSAgICAgICAgICAgIHwKfCBCQ1cyMDE4NDkgICAgfCAgMi4yICB8IFdldCBTaG9vdCB8ICAgICAgICAgICA0MTUuMjIgICAgICAgICAgICB8CnwgQkNXMjAxODgxICAgIHwgIDIuMyAgfCBEcnkgUm9vdCAgfCAgICAgICAgICAgIDExLjk0ICAgICAgICAgICAgfAp8IEJDVzIwMTkwMCAgICB8ICAyLjQgIHwgRHJ5IFJvb3QgIHwgICAgICAgICAgICA1LjYzICAgICAgICAgICAgIHwKfCBCQ1cyMDE5MDAgICAgfCAgMi40ICB8IERyeSBTaG9vdCB8ICAgICAgICAgICAgMjUuOTIgICAgICAgICAgICB8CnwgQkNXMjAxODE0ICAgIHwgIDIuNCAgfCBEcnkgU2hvb3QgfCAgICAgICAgICAgIDI0LjE5ICAgICAgICAgICAgfAp8IEJDVzIwMTkwMCAgICB8ICAyLjQgIHwgV2V0IFJvb3QgIHwgICAgICAgICAgICA3OS43ICAgICAgICAgICAgIHwKfCBCQ1cyMDE4MTQgICAgfCAgMi40ICB8IFdldCBTaG9vdCB8ICAgICAgICAgICAyNDguMjggICAgICAgICAgICB8CnwgQkNXMjAxOTAwICAgIHwgIDIuNCAgfCBXZXQgU2hvb3QgfCAgICAgICAgICAgMzk3LjA1ICAgICAgICAgICAgfAp8IEJDVzIwMTA4OCAgICB8ICAzLjEgIHwgRHJ5IFJvb3QgIHwgICAgICAgICAgICAgMy45MCAgICAgICAgICAgIHwKfCBCQ1cyMDE5MTQgICAgfCAgMy4xICB8IERyeSBTaG9vdCB8ICAgICAgICAgICAgMjAuMjMgICAgICAgICAgICB8CnwgQkNXMjAxODE1ICAgIHwgIDQuMiAgfCBEcnkgUm9vdCAgfCAgICAgICAgICAgICAyLjY3ICAgICAgICAgICAgfAp8IEJDVzIwMTA4NCAgICB8ICA0LjIgIHwgRHJ5IFJvb3QgIHwgICAgICAgICAgICAgMi40MyAgICAgICAgICAgIHwKfCBCQ1cyMDE4MTUgICAgfCAgNC4yICB8IERyeSBTaG9vdCB8ICAgICAgICAgICAgMjEuMTAgICAgICAgICAgICB8CnwgQkNXMjAxMDg0ICAgIHwgIDQuMiAgfCBXZXQgUm9vdCAgfCAgICAgICAgICAgIDI4LjkwICAgICAgICAgICAgfAp8IEJDVzIwMTgxNSAgICB8ICA0LjIgIHwgV2V0IFJvb3QgIHwgICAgICAgICAgICAyNy4yNyAgICAgICAgICAgIHwKCioqVG90YWwgTnVtYmVyIG9mIGlzb2xhdGVzIHdpdGggc3RhdGlzdGljYWxseSBzdXBwb3J0ZWQgcG9zaXRpdmUgZWZmZWN0cyBvbiBtZWFuIHdlaWdodDoqKiAxNgoqKk5vdGU6KiogVGhlcmUgYXJlIHNldmVyYWwgaXNvbGF0ZXMgaW4gdGhlIGZpcnN0IGJhdGNoIHRoYXQgZGlzcGxheSB0aGUgdHJlbmQgb2YgaGlnaGx5IGluY3JlYXNlZCBwbGFudCBiaW9tYXNzLCBlaXRoZXIgaW4gc2hvb3RzIG9yIHJvb3RzLCBidXQgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIG92ZXJsYXAgd2l0aCB0aG9zZSBvZiB0aGUgY29udHJvbHMgYmFzZWQgb24gbGluZWFyIG1vZGVsaW5nIG9mIHRoZSBkYXRhLgoKIyMjIE4gaXNvbGF0ZXMgaW4gZWFjaCBiYXRjaApgYGB7cn0Kc3RyKHNldF8xKQp1bmlxdWUoc2V0XzEkaXNvbGF0ZSkKYGBgCgo=